diff -NaurX dontdiff linux-2.4.24-pa0.orig/arch/parisc/kernel/entry.S linux-2.4.24-pa0/arch/parisc/kernel/entry.S --- linux-2.4.24-pa0.orig/arch/parisc/kernel/entry.S 2003-12-05 07:42:32.000000000 +0100 +++ linux-2.4.24-pa0/arch/parisc/kernel/entry.S 2004-01-22 13:22:04.000000000 +0100 @@ -2227,9 +2227,12 @@ STREG %r28,TASK_PT_GR28-TASK_SZ_ALGN-FRAME_SIZE(%r30) +#ifdef CONFIG_HPUX + /* Save other hpux returns if personality is PER_HPUX */ -#define PER_HPUX 0xe /* cannot be easily included */ +/* cannot be easily included */ +#define PER_HPUX 0xe LDREG TASK_PERSONALITY-TASK_SZ_ALGN-FRAME_SIZE(%r30),%r19 CMPIB<>,n PER_HPUX,%r19,1f @@ -2237,6 +2240,8 @@ STREG %r29,TASK_PT_GR29-TASK_SZ_ALGN-FRAME_SIZE(%r30) 1: +#endif /* CONFIG_HPUX */ + /* Seems to me that dp could be wrong here, if the syscall involved * calling a module, and nothing got round to restoring dp on return. */ diff -NaurX dontdiff linux-2.4.24-pa0.orig/arch/parisc/kernel/firmware.c linux-2.4.24-pa0/arch/parisc/kernel/firmware.c --- linux-2.4.24-pa0.orig/arch/parisc/kernel/firmware.c 2003-10-02 07:30:55.000000000 +0200 +++ linux-2.4.24-pa0/arch/parisc/kernel/firmware.c 2004-01-22 18:16:12.000000000 +0100 @@ -1,10 +1,22 @@ -/* arch/parisc/kernel/firmware.c - safe pdc access routines +/* + * arch/parisc/kernel/firmware.c - safe PDC access routines + * + * PDC == Processor Dependent Code + * + * See http://www.parisc-linux.org/documentation/index.html + * for documentation describing the entry points and calling + * conventions defined below. * * Copyright 1999 SuSE GmbH Nuernberg (Philipp Rumpf, prumpf@tux.org) - * portions Copyright 1999 The Puffin Group, (Alex deVries, David Kennedy) + * Copyright 1999 The Puffin Group, (Alex deVries, David Kennedy) + * Copyright 2003 Grant Grundler * - * only these routines should be used out of the real kernel (i.e. everything - * using virtual addresses) for obvious reasons */ + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + */ /* I think it would be in everyone's best interest to follow this * guidelines when writing PDC wrappers: @@ -41,19 +53,20 @@ * prumpf 991016 */ +#include + +#include +#include #include +#include #include #include -#include -#include #include #include #include #include /* for boot_cpu_data */ -#include - static spinlock_t pdc_lock = SPIN_LOCK_UNLOCKED; static unsigned long pdc_result[32] __attribute__ ((aligned (8))); static unsigned long pdc_result2[32] __attribute__ ((aligned (8))); @@ -70,9 +83,9 @@ */ #ifdef __LP64__ -static long real64_call(unsigned long function, ...); +long real64_call(unsigned long function, ...); #endif -static long real32_call(unsigned long function, ...); +long real32_call(unsigned long function, ...); #if defined(__LP64__) && ! defined(CONFIG_PDC_NARROW) #define MEM_PDC (unsigned long)(PAGE0->mem_pdc_hi) << 32 | PAGE0->mem_pdc @@ -143,14 +156,15 @@ */ int pdc_add_valid(unsigned long address) { - int retval; + int retval; - spin_lock_irq(&pdc_lock); - retval = mem_pdc_call(PDC_ADD_VALID, PDC_ADD_VALID_VERIFY, address); - spin_unlock_irq(&pdc_lock); + spin_lock_irq(&pdc_lock); + retval = mem_pdc_call(PDC_ADD_VALID, PDC_ADD_VALID_VERIFY, address); + spin_unlock_irq(&pdc_lock); - return retval; + return retval; } +/* EXPORT_SYMBOL(pdc_add_valid); */ /** * pdc_chassis_info - Return chassis information. @@ -162,18 +176,18 @@ */ int __init pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len) { - int retval; + int retval; - spin_lock_irq(&pdc_lock); - memcpy(&pdc_result, chassis_info, sizeof(*chassis_info)); - memcpy(&pdc_result2, led_info, len); - retval = mem_pdc_call(PDC_CHASSIS, PDC_RETURN_CHASSIS_INFO, - __pa(pdc_result), __pa(pdc_result2), len); - memcpy(chassis_info, pdc_result, sizeof(*chassis_info)); - memcpy(led_info, pdc_result2, len); - spin_unlock_irq(&pdc_lock); + spin_lock_irq(&pdc_lock); + memcpy(&pdc_result, chassis_info, sizeof(*chassis_info)); + memcpy(&pdc_result2, led_info, len); + retval = mem_pdc_call(PDC_CHASSIS, PDC_RETURN_CHASSIS_INFO, + __pa(pdc_result), __pa(pdc_result2), len); + memcpy(chassis_info, pdc_result, sizeof(*chassis_info)); + memcpy(led_info, pdc_result2, len); + spin_unlock_irq(&pdc_lock); - return retval; + return retval; } /** @@ -187,9 +201,9 @@ { if (!is_pdc_pat()) return -1; - + int retval = 0; - + spin_lock_irq(&pdc_lock); retval = mem_pdc_call(PDC_PAT_CHASSIS_LOG, PDC_PAT_CHASSIS_WRITE_LOG, __pa(&state), __pa(&data)); spin_unlock_irq(&pdc_lock); @@ -224,18 +238,18 @@ */ int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) { - int retval; + int retval; - spin_lock_irq(&pdc_lock); - retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); - convert_to_wide(pdc_result); - pdc_coproc_info->ccr_functional = pdc_result[0]; - pdc_coproc_info->ccr_present = pdc_result[1]; - pdc_coproc_info->revision = pdc_result[17]; - pdc_coproc_info->model = pdc_result[18]; - spin_unlock_irq(&pdc_lock); + spin_lock_irq(&pdc_lock); + retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); + convert_to_wide(pdc_result); + pdc_coproc_info->ccr_functional = pdc_result[0]; + pdc_coproc_info->ccr_present = pdc_result[1]; + pdc_coproc_info->revision = pdc_result[17]; + pdc_coproc_info->model = pdc_result[18]; + spin_unlock_irq(&pdc_lock); - return retval; + return retval; } /** @@ -264,6 +278,7 @@ return retval; } +/* EXPORT_SYMBOL(pdc_iodc_read); */ /** * pdc_system_map_find_mods - Locate unarchitected modules. @@ -518,6 +533,7 @@ return retval; } +/* EXPORT_SYMBOL(pdc_lan_station_id); */ /** @@ -537,8 +553,8 @@ * o cable too long (ie SE scsi 10Mhz won't support 6m length), * o bus width exported is less than what the interface chip supports. */ -int pdc_get_initiator( struct hardware_path *hwpath, unsigned char *scsi_id, - unsigned long *period, char *width, char *mode) +int pdc_get_initiator(struct hardware_path *hwpath, unsigned char *scsi_id, + unsigned long *period, char *width, char *mode) { int retval; @@ -556,42 +572,40 @@ /* convert Bus speed in Mhz to period (in 1/10 ns) */ switch(pdc_result[1]) { - /* - ** case 0: driver determines rate - ** case -1: Settings are uninitialized. - */ - case 5: *period = 2000; break; - case 10: *period = 1000; break; - case 20: *period = 500; break; - case 40: *period = 250; break; - default: /* Do nothing */ break; + /* + * case 0: driver determines rate + * case -1: Settings are uninitialized. + */ + case 5: *period = 2000; break; + case 10: *period = 1000; break; + case 20: *period = 500; break; + case 40: *period = 250; break; + default: /* Do nothing */ break; } /* - ** pdc_result[2] PDC suggested SCSI id - ** pdc_result[3] PDC suggested SCSI rate - */ + * pdc_result[2] PDC suggested SCSI id + * pdc_result[3] PDC suggested SCSI rate + */ /* C3000 and similar workstations report period/mode */ if (IS_SPROCKETS()) { - /* - ** 0 == 8-bit - ** 1 == 16-bit - */ + /* 0 == 8-bit, 1 == 16-bit */ *width = (char) pdc_result[4]; /* ...in case someone needs it in the future. - ** sym53c8xx.c comments say it can't autodetect - ** for 825/825A/875 chips. - ** 0 == SE, 1 == HVD, 2 == LVD - */ + * sym53c8xx.c comments say it can't autodetect + * for 825/825A/875 chips. + * 0 == SE, 1 == HVD, 2 == LVD + */ *mode = (char) pdc_result[5]; } } spin_unlock_irq(&pdc_lock); - return retval >= PDC_OK; + return (retval >= PDC_OK); } +/* EXPORT_SYMBOL(pdc_get_initiator); */ /** @@ -640,6 +654,49 @@ } +#if 0 /* UNTEST CODE - left here in case someone needs it */ + +/* + * pdc_pci_config_read - read PCI config space. + * @hpa token from PDC to indicate which PCI device + * @pci_addr configuration space address to read from + * + * Read PCI Configuration space *before* linux PCI subsystem is running. + */ +unsigned int pdc_pci_config_read(void *hpa, unsigned long cfg_addr) +{ + int retval; + spin_lock_irq(&pdc_lock); + pdc_result[0] = 0; + pdc_result[1] = 0; + retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_READ_CONFIG, + __pa(pdc_result), hpa, cfg_addr&~3UL, 4UL); + spin_unlock_irq(&pdc_lock); + return retval ? ~0 : (unsigned int) pdc_result[0]; +} + + +/* + * pdc_pci_config_write - read PCI config space. + * @hpa token from PDC to indicate which PCI device + * @pci_addr configuration space address to write + * @val value we want in the 32-bit register + * + * Write PCI Configuration space *before* linux PCI subsystem is running. + */ +void pdc_pci_config_write(void *hpa, unsigned long cfg_addr, unsigned int val) +{ + int retval; + spin_lock_irq(&pdc_lock); + pdc_result[0] = 0; + retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_WRITE_CONFIG, + __pa(pdc_result), hpa, + cfg_addr&~3UL, 4UL, (unsigned long) val); + spin_unlock_irq(&pdc_lock); + return retval; +} +#endif /* UNTESTED CODE */ + /** * pdc_tod_read - Read the Time-Of-Day clock. * @tod: The return buffer: @@ -658,6 +715,7 @@ return retval; } +/* EXPORT_SYMBOL(pdc_tod_read); */ /** * pdc_tod_set - Set the Time-Of-Day clock. @@ -676,6 +734,7 @@ return retval; } +/* EXPORT_SYMBOL(pdc_tod_set); */ #ifdef __LP64__ int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr, @@ -770,20 +829,34 @@ } /* - * pdc_suspend_usb - Stop USB controller + * pdc_io_reset - Hack to avoid overlapping range registers of Bridges devices. + * Primarily a problem on T600 (which parisc-linux doesn't support) but + * who knows what other platform firmware might do with this OS "hook". + */ +void pdc_io_reset(void) +{ + spin_lock_irq(&pdc_lock); + mem_pdc_call(PDC_IO, PDC_IO_RESET, 0); + spin_unlock_irq(&pdc_lock); +} + +/* + * pdc_io_reset_devices - Hack to Stop USB controller * * If PDC used the usb controller, the usb controller * is still running and will crash the machines during iommu * setup, because of still running DMA. This PDC call - * stops the USB controller + * stops the USB controller. + * Normally called after calling pdc_io_reset(). */ -void pdc_suspend_usb(void) +void pdc_io_reset_devices(void) { spin_lock_irq(&pdc_lock); - mem_pdc_call(PDC_IO, PDC_IO_SUSPEND_USB, 0); + mem_pdc_call(PDC_IO, PDC_IO_RESET_DEVICES, 0); spin_unlock_irq(&pdc_lock); } + /** * pdc_iodc_putc - Console character print using IODC. * @c: the character to output. @@ -903,6 +976,7 @@ return retval; } +/* EXPORT_SYMBOL(pdc_sti_call); */ #ifdef __LP64__ /** @@ -1065,7 +1139,7 @@ /* in reality, there's nearly 8k of stack after this */ }; -static long real32_call(unsigned long fn, ...) +long real32_call(unsigned long fn, ...) { va_list args; extern struct narrow_stack real_stack32; @@ -1116,7 +1190,7 @@ /* in reality, there's nearly 8k of stack after this */ }; -static long real64_call(unsigned long fn, ...) +long real64_call(unsigned long fn, ...) { va_list args; extern struct wide_stack real_stack64; diff -NaurX dontdiff linux-2.4.24-pa0.orig/arch/parisc/kernel/inventory.c linux-2.4.24-pa0/arch/parisc/kernel/inventory.c --- linux-2.4.24-pa0.orig/arch/parisc/kernel/inventory.c 2003-08-04 08:00:00.000000000 +0200 +++ linux-2.4.24-pa0/arch/parisc/kernel/inventory.c 2004-01-22 19:04:39.000000000 +0100 @@ -167,9 +167,6 @@ static int __init pat_query_module(ulong pcell_loc, ulong mod_index) { -#ifdef DEBUG_PAT - pdc_pat_cell_mod_maddr_block_t io_pdc_cell; -#endif pdc_pat_cell_mod_maddr_block_t pa_pdc_cell; unsigned long bytecnt; unsigned long temp; /* 64-bit scratch value */ @@ -209,6 +206,7 @@ register_parisc_device(dev); /* advertise device */ #ifdef DEBUG_PAT + pdc_pat_cell_mod_maddr_block_t io_pdc_cell; /* dump what we see so far... */ switch (PAT_GET_ENTITY(dev->mod_info)) { unsigned long i; @@ -527,12 +525,6 @@ int i; long status = PDC_OK; - /* - * first stop the usb controller, otherwise the machine - * might crash during iommu setup - */ - pdc_suspend_usb(); - for (i = 0; status != PDC_BAD_PROC && status != PDC_NE_MOD; i++) { struct parisc_device *dev; struct pdc_system_map_mod_info module_result; diff -NaurX dontdiff linux-2.4.24-pa0.orig/arch/parisc/kernel/pdc_cons.c linux-2.4.24-pa0/arch/parisc/kernel/pdc_cons.c --- linux-2.4.24-pa0.orig/arch/parisc/kernel/pdc_cons.c 2004-01-19 07:25:46.000000000 +0100 +++ linux-2.4.24-pa0/arch/parisc/kernel/pdc_cons.c 2004-01-22 19:54:48.082678104 +0100 @@ -41,8 +41,10 @@ /* Define EARLY_BOOTUP_DEBUG to debug kernel related boot problems. * On production kernels EARLY_BOOTUP_DEBUG should be undefined. */ +/* #undef EARLY_BOOTUP_DEBUG - + */ +#define EARLY_BOOTUP_DEBUG #include #include @@ -82,7 +84,7 @@ #if defined(CONFIG_PDC_CONSOLE) || defined(CONFIG_SERIAL_MUX) #define PDC_CONSOLE_DEVICE pdc_console_device -static kdev_t pdc_console_device (struct console *c) +static kdev_t pdc_console_device(struct console *c) { return MKDEV(MUX_MAJOR, 0); } @@ -91,18 +93,18 @@ #endif static struct console pdc_cons = { - name: "ttyB", - write: pdc_console_write, + .name = "ttyB", + .write = pdc_console_write, #warning UPSTREAM 2.4.19 removed the next 4 lines but we did not - read: NULL, - device: PDC_CONSOLE_DEVICE, - unblank: NULL, - setup: pdc_console_setup, - flags: CON_BOOT|CON_PRINTBUFFER|CON_ENABLED, - index: -1, + .read = NULL, + .device = PDC_CONSOLE_DEVICE, + .unblank = NULL, + .setup = pdc_console_setup, + .flags = CON_BOOT|CON_PRINTBUFFER|CON_ENABLED, + .index = -1, }; -static int pdc_console_initialized; +static int pdc_console_initialized = 0; extern unsigned long con_start; /* kernel/printk.c */ extern unsigned long log_end; /* kernel/printk.c */ @@ -164,7 +166,7 @@ return; while ((console = console_drivers) != NULL) - unregister_console(console_drivers); + unregister_console(console); /* Don't repeat what we've already printed */ con_start = log_end; diff -NaurX dontdiff linux-2.4.24-pa0.orig/arch/parisc/kernel/real2.S linux-2.4.24-pa0/arch/parisc/kernel/real2.S --- linux-2.4.24-pa0.orig/arch/parisc/kernel/real2.S 2003-09-22 09:06:22.000000000 +0200 +++ linux-2.4.24-pa0/arch/parisc/kernel/real2.S 2004-01-22 16:52:43.000000000 +0100 @@ -13,7 +13,7 @@ .section .bss .export real_stack32 #ifdef __LP64__ - .export real_stack64 + .export real_stack64 #endif .align 64 real_stack32: diff -NaurX dontdiff linux-2.4.24-pa0.orig/arch/parisc/kernel/sba_iommu.c linux-2.4.24-pa0/arch/parisc/kernel/sba_iommu.c --- linux-2.4.24-pa0.orig/arch/parisc/kernel/sba_iommu.c 2002-12-03 08:07:12.000000000 +0100 +++ linux-2.4.24-pa0/arch/parisc/kernel/sba_iommu.c 2004-01-22 19:47:45.000000000 +0100 @@ -579,7 +579,8 @@ if (pide >= (ioc->res_size << 3)) { pide = sba_search_bitmap(ioc, pages_needed); if (pide >= (ioc->res_size << 3)) - panic(__FILE__ ": I/O MMU @ %lx is out of mapping resources\n", ioc->ioc_hpa); + panic("%s: I/O MMU @ %lx is out of mapping resources\n", + __FILE__, ioc->ioc_hpa); } #ifdef ASSERT_PDIR_SANITY @@ -904,8 +905,8 @@ * * See Documentation/DMA-mapping.txt */ -static void -sba_unmap_single(struct pci_dev *dev, dma_addr_t iova, size_t size, int direction) +static void sba_unmap_single(struct pci_dev *dev, dma_addr_t iova, size_t size, + int direction) { struct ioc *ioc; #if DELAYED_RESOURCE_CNT > 0 @@ -974,8 +975,8 @@ * * See Documentation/DMA-mapping.txt */ -static void * -sba_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle) +static void *sba_alloc_consistent(struct pci_dev *hwdev, size_t size, + dma_addr_t *dma_handle) { void *ret; @@ -1006,7 +1007,8 @@ * See Documentation/DMA-mapping.txt */ static void -sba_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle) +sba_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, + dma_addr_t dma_handle) { sba_unmap_single(hwdev, dma_handle, size, 0); free_pages((unsigned long) vaddr, get_order(size)); @@ -1113,7 +1115,7 @@ /* ** Two address ranges are DMA contiguous *iff* "end of prev" and -** "start of next" are both on a page boundry. +** "start of next" are both on a page boundary. ** ** (shift left is a quick trick to mask off upper bits) */ @@ -1131,7 +1133,7 @@ * in the DMA stream. Allocates PDIR entries but does not fill them. * Returns the number of DMA chunks. * - * Doing the fill seperate from the coalescing/allocation keeps the + * Doing the fill separate from the coalescing/allocation keeps the * code simpler. Future enhancement could make one pass through * the sglist do both. */ @@ -1218,7 +1220,7 @@ ** can't change. And we need the offset from the first ** chunk - not the last one. Ergo Successive chunks ** must start on page boundaries and dove tail - ** with it's predecessor. + ** with its predecessor. */ sg_dma_len(vcontig_sg) = vcontig_len; @@ -1268,7 +1270,8 @@ * See Documentation/DMA-mapping.txt */ static int -sba_map_sg(struct pci_dev *dev, struct scatterlist *sglist, int nents, int direction) +sba_map_sg(struct pci_dev *dev, struct scatterlist *sglist, int nents, + int direction) { struct ioc *ioc; int coalesced, filled = 0; @@ -1350,7 +1353,8 @@ * See Documentation/DMA-mapping.txt */ static void -sba_unmap_sg(struct pci_dev *dev, struct scatterlist *sglist, int nents, int direction) +sba_unmap_sg(struct pci_dev *dev, struct scatterlist *sglist, int nents, + int direction) { struct ioc *ioc; #ifdef ASSERT_PDIR_SANITY @@ -1395,15 +1399,15 @@ } static struct pci_dma_ops sba_ops = { - sba_dma_supported, - sba_alloc_consistent, /* allocate cacheable host mem */ - sba_free_consistent, /* release cacheable host mem */ - sba_map_single, - sba_unmap_single, - sba_map_sg, - sba_unmap_sg, - NULL, /* dma_sync_single */ - NULL /* dma_sync_sg */ + .dma_supported = sba_dma_supported, + .alloc_consistent = sba_alloc_consistent, /* allocate cacheable host mem */ + .free_consistent = sba_free_consistent, /* release cacheable host mem */ + .map_single = sba_map_single, + .unmap_single = sba_unmap_single, + .map_sg = sba_map_sg, + .unmap_sg = sba_unmap_sg, + .dma_sync_single = NULL, + .dma_sync_sg = NULL, }; @@ -1678,6 +1682,22 @@ int num_ioc; u64 ioc_ctl; + if (!is_pdc_pat()) { + /* + * Shutdown the USB controller on Astro-based workstations. + * Once we reprogram the IOMMU, the next DMA performed by + * USB will HPMC the box. + */ + pdc_io_reset_devices(); + + /* + * XXX May need something more sophisticated to deal + * with DMA from LAN. Maybe use page zero boot device + * as a handle to talk to PDC about which device to + * shutdown. This also needs to work for is_pdc_pat(). + */ + } + ioc_ctl = READ_REG(sba_dev->sba_hpa+IOC_CTRL); DBG_INIT("%s() hpa 0x%lx ioc_ctl 0x%Lx ->", __FUNCTION__, sba_dev->sba_hpa, ioc_ctl); @@ -1728,9 +1748,10 @@ { int i; - /* add this one to the head of the list (order doesn't matter) - ** This will be useful for debugging - especially if we get coredumps - */ + /* + * add this one to the head of the list (order doesn't matter) + * This will be useful for debugging - especially if we get coredumps + */ sba_dev->next = sba_list; sba_list = sba_dev; @@ -1764,7 +1785,8 @@ if (NULL == sba_dev->ioc[i].res_map) { - panic(__FILE__ ":%s() could not allocate resource map\n", __FUNCTION__ ); + panic("%s:%s() could not allocate resource map\n", + __FILE__, __FUNCTION__); } memset(sba_dev->ioc[i].res_map, 0, res_size); @@ -1918,9 +1940,9 @@ int sba_driver_callback(struct parisc_device *); static struct parisc_driver sba_driver = { - name: MODULE_NAME, - id_table: sba_tbl, - probe: sba_driver_callback, + .name = MODULE_NAME, + .id_table = sba_tbl, + .probe = sba_driver_callback, }; /* diff -NaurX dontdiff linux-2.4.24-pa0.orig/include/asm-parisc/pdc.h linux-2.4.24-pa0/include/asm-parisc/pdc.h --- linux-2.4.24-pa0.orig/include/asm-parisc/pdc.h 2002-10-04 07:48:47.000000000 +0200 +++ linux-2.4.24-pa0/include/asm-parisc/pdc.h 2004-01-22 18:43:13.000000000 +0100 @@ -191,8 +191,8 @@ #define PDC_IO 135 /* log error info, reset IO system */ #define PDC_IO_READ_AND_CLEAR_ERRORS 0 -#define PDC_IO_READ_AND_LOG_ERRORS 1 -#define PDC_IO_SUSPEND_USB 2 +#define PDC_IO_RESET 1 +#define PDC_IO_RESET_DEVICES 2 /* sets bits 6&7 (little endian) of the HcControl Register */ #define PDC_IO_USB_SUSPEND 0xC000000000000000 #define PDC_IO_EEPROM_IO_ERR_TABLE_FULL -5 /* return value */ @@ -476,7 +476,11 @@ #define PDC_TYPE_SYSTEM_MAP 1 /* 32-bit, but supports PDC_SYSTEM_MAP */ #define PDC_TYPE_SNAKE 2 /* Doesn't support SYSTEM_MAP */ -#define is_pdc_pat() (pdc_type == PDC_TYPE_PAT) +#ifdef CONFIG_PARISC64 +#define is_pdc_pat() (PDC_TYPE_PAT == pdc_type) +#else +#define is_pdc_pat() (0) +#endif struct pdc_chassis_info { /* for PDC_CHASSIS_INFO */ unsigned long actcnt; /* actual number of bytes returned */ @@ -951,7 +955,8 @@ int pdc_do_reset(void); int pdc_soft_power_info(unsigned long *power_reg); int pdc_soft_power_button(int sw_control); -void pdc_suspend_usb(void); +void pdc_io_reset(void); +void pdc_io_reset_devices(void); int pdc_iodc_getc(void); void pdc_iodc_putc(unsigned char c); void pdc_iodc_outc(unsigned char c); @@ -963,7 +968,6 @@ #ifdef __LP64__ int pdc_pat_chassis_send_log(unsigned long status, unsigned long data); - int pdc_pat_cell_get_number(struct pdc_pat_cell_num *cell_info); int pdc_pat_cell_module(unsigned long *actcnt, unsigned long ploc, unsigned long mod, unsigned long view_type, void *mem_addr);