diff options
| author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-05-04 04:16:59 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-05-04 04:16:59 -0700 |
| commit | dae1a193e4543ebbaceaa2eab56bf3d025097a8d (patch) | |
| tree | 3b54d1130f74b8bf3b4005ee81da4e5cfdc36c53 | |
| parent | ae959b6d2a403207a7e4bfb7368ad6121162bd47 (diff) | |
| parent | e19e23033576506fea82f72e39c7cdd2b477df76 (diff) | |
Merge bk://kernel.bkbits.net/davem/sparc-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
| -rw-r--r-- | arch/arm/common/sa1111.c | 6 | ||||
| -rw-r--r-- | arch/arm/tools/mach-types | 16 | ||||
| -rw-r--r-- | arch/ia64/kernel/efi.c | 44 | ||||
| -rw-r--r-- | drivers/pcmcia/ti113x.h | 21 | ||||
| -rw-r--r-- | drivers/serial/8250_hcdp.c | 31 | ||||
| -rw-r--r-- | drivers/serial/8250_hcdp.h | 3 | ||||
| -rw-r--r-- | drivers/serial/8250_pci.c | 174 | ||||
| -rw-r--r-- | include/linux/efi.h | 47 | ||||
| -rw-r--r-- | ipc/mqueue.c | 4 | ||||
| -rw-r--r-- | kernel/printk.c | 4 |
10 files changed, 328 insertions, 22 deletions
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c index 511327e88738..ee4b692e1d68 100644 --- a/arch/arm/common/sa1111.c +++ b/arch/arm/common/sa1111.c @@ -589,8 +589,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent, ret = dmabounce_register_dev(&dev->dev, 1024, 4096); if (ret) { printk("SA1111: Failed to register %s with dmabounce", dev->dev.bus_id); - kfree(dev); - device_unregister(dev); + device_unregister(&dev->dev); } } } @@ -779,8 +778,7 @@ int dma_needs_bounce(struct device *dev, dma_addr_t addr, size_t size) /* * Check to see if either the start or end are illegal. */ - return ((addr & ~(*dev->dma_mask))) || - ((addr + size - 1) & ~(*dev->dma_mask)); + return ((addr & ~dma_mask)) || ((addr + size - 1) & ~dma_mask); } struct sa1111_save_data { diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index 42f05e4e8c56..2a594d21d818 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types @@ -6,7 +6,7 @@ # To add an entry into this database, please see Documentation/arm/README, # or contact rmk@arm.linux.org.uk # -# Last update: Thu Apr 15 10:14:37 2004 +# Last update: Thu Apr 29 19:06:33 2004 # # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number # @@ -242,7 +242,7 @@ killbear SA1100_KILLBEAR KILLBEAR 230 yoho ARCH_YOHO YOHO 231 jasper ARCH_JASPER JASPER 232 dsc25 ARCH_DSC25 DSC25 233 -innovator ARCH_INNOVATOR INNOVATOR 234 +omap_innovator MACH_OMAP_INNOVATOR OMAP_INNOVATOR 234 ramses ARCH_RAMSES RAMSES 235 s28x ARCH_S28X S28X 236 mport3 ARCH_MPORT3 MPORT3 237 @@ -390,7 +390,7 @@ espd_4510b ARCH_ESPD_4510B ESPD_4510B 378 mp1x ARCH_MP1X MP1X 379 at91rm9200tb ARCH_AT91RM9200TB AT91RM9200TB 380 adsvgx ARCH_ADSVGX ADSVGX 381 -omap_h2 ARCH_OMAP_H2 OMAP_H2 382 +omap_h2 MACH_OMAP_H2 OMAP_H2 382 pelee ARCH_PELEE PELEE 383 e740 MACH_E740 E740 384 iq80331 ARCH_IQ80331 IQ80331 385 @@ -523,3 +523,13 @@ montajade MACH_MONTAJADE MONTAJADE 512 sg560 MACH_SG560 SG560 513 dp1000 MACH_DP1000 DP1000 514 omap_osk MACH_OMAP_OSK OMAP_OSK 515 +rg100v3 MACH_RG100V3 RG100V3 516 +mx2ads MACH_MX2ADS MX2ADS 517 +pxa_kilo MACH_PXA_KILO PXA_KILO 518 +ixp4xx_eagle MACH_IXP4XX_EAGLE IXP4XX_EAGLE 519 +tosa MACH_TOSA TOSA 520 +mb2520f MACH_MB2520F MB2520F 521 +emc1000 MACH_EMC1000 EMC1000 522 +tidsc25 MACH_TIDSC25 TIDSC25 523 +akcpmxl MACH_AKCPMXL AKCPMXL 524 +av3xx MACH_AV3XX AV3XX 525 diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index ed6bb909be0e..13572d153cf6 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c @@ -733,3 +733,47 @@ valid_phys_addr_range (unsigned long phys_addr, unsigned long *size) return 0; } +int __init +efi_uart_console_only(void) +{ + efi_status_t status; + char *s, name[] = "ConOut"; + efi_guid_t guid = EFI_GLOBAL_VARIABLE_GUID; + efi_char16_t *utf16, name_utf16[32]; + unsigned char data[1024]; + unsigned long size = sizeof(data); + struct efi_generic_dev_path *hdr, *end_addr; + int uart = 0; + + /* Convert to UTF-16 */ + utf16 = name_utf16; + s = name; + while (*s) + *utf16++ = *s++ & 0x7f; + *utf16 = 0; + + status = efi.get_variable(name_utf16, &guid, NULL, &size, data); + if (status != EFI_SUCCESS) { + printk(KERN_ERR "No EFI %s variable?\n", name); + return 0; + } + + hdr = (struct efi_generic_dev_path *) data; + end_addr = (struct efi_generic_dev_path *) ((u8 *) data + size); + while (hdr < end_addr) { + if (hdr->type == EFI_DEV_MSG && + hdr->sub_type == EFI_DEV_MSG_UART) + uart = 1; + else if (hdr->type == EFI_DEV_END_PATH || + hdr->type == EFI_DEV_END_PATH2) { + if (!uart) + return 0; + if (hdr->sub_type == EFI_DEV_END_ENTIRE) + return 1; + uart = 0; + } + hdr = (struct efi_generic_dev_path *) ((u8 *) hdr + hdr->length); + } + printk(KERN_ERR "Malformed %s value\n", name); + return 0; +} diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h index 496a51923285..315f634fd7f1 100644 --- a/drivers/pcmcia/ti113x.h +++ b/drivers/pcmcia/ti113x.h @@ -150,6 +150,10 @@ /* ExCA IO offset registers */ #define TI113X_IO_OFFSET(map) (0x36+((map)<<1)) +/* EnE test register */ +#define ENE_TEST_C9 0xc9 /* 8bit */ +#define ENE_TEST_C9_TLTENABLE 0x02 + #ifdef CONFIG_CARDBUS /* @@ -160,6 +164,7 @@ #define ti_devctl(socket) ((socket)->private[2]) #define ti_diag(socket) ((socket)->private[3]) #define ti_mfunc(socket) ((socket)->private[4]) +#define ene_test_c9(socket) ((socket)->private[5]) /* * These are the TI specific power management handlers. @@ -171,6 +176,9 @@ static void ti_save_state(struct yenta_socket *socket) ti_cardctl(socket) = config_readb(socket, TI113X_CARD_CONTROL); ti_devctl(socket) = config_readb(socket, TI113X_DEVICE_CONTROL); ti_diag(socket) = config_readb(socket, TI1250_DIAGNOSTIC); + + if (socket->dev->vendor == PCI_VENDOR_ID_ENE) + ene_test_c9(socket) = config_readb(socket, ENE_TEST_C9); } static void ti_restore_state(struct yenta_socket *socket) @@ -180,6 +188,9 @@ static void ti_restore_state(struct yenta_socket *socket) config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket)); config_writeb(socket, TI113X_DEVICE_CONTROL, ti_devctl(socket)); config_writeb(socket, TI1250_DIAGNOSTIC, ti_diag(socket)); + + if (socket->dev->vendor == PCI_VENDOR_ID_ENE) + config_writeb(socket, ENE_TEST_C9, ene_test_c9(socket)); } /* @@ -592,6 +603,16 @@ static int ti12xx_override(struct yenta_socket *socket) } /* + * for EnE bridges only: clear testbit TLTEnable. this makes the + * RME Hammerfall DSP sound card working. + */ + if (socket->dev->vendor == PCI_VENDOR_ID_ENE) { + u8 test_c9 = config_readb(socket, ENE_TEST_C9); + test_c9 &= ~ENE_TEST_C9_TLTENABLE; + config_writeb(socket, ENE_TEST_C9, test_c9); + } + + /* * Yenta expects controllers to use CSCINT to route * CSC interrupts to PCI rather than INTVAL. */ diff --git a/drivers/serial/8250_hcdp.c b/drivers/serial/8250_hcdp.c index 8179a6144892..e7b573f63388 100644 --- a/drivers/serial/8250_hcdp.c +++ b/drivers/serial/8250_hcdp.c @@ -11,6 +11,7 @@ */ #include <linux/config.h> +#include <linux/console.h> #include <linux/kernel.h> #include <linux/efi.h> #include <linux/init.h> @@ -44,6 +45,7 @@ setup_serial_hcdp(void *tablep) unsigned long iobase; hcdp_t hcdp; int gsi, nr; + static char options[16]; #if 0 static int shift_once = 1; #endif @@ -147,7 +149,7 @@ setup_serial_hcdp(void *tablep) printk(" gsi = %d, baud rate = %lu, bits = %d, clock = %d\n", gsi, (unsigned long) hcdp_dev->baud, hcdp_dev->bits, hcdp_dev->clock_rate); - if (hcdp_dev->base_addr.space_id == ACPI_PCICONF_SPACE) + if (HCDP_PCI_UART(hcdp_dev)) printk(" PCI id: %02x:%02x:%02x, vendor ID=0x%x, " "dev ID=0x%x\n", hcdp_dev->pci_seg, hcdp_dev->pci_bus, hcdp_dev->pci_dev, @@ -179,16 +181,26 @@ setup_serial_hcdp(void *tablep) printk(KERN_WARNING"warning: No support for PCI serial console\n"); return; } + + if (HCDP_IRQ_SUPPORTED(hcdp_dev)) { #ifdef CONFIG_IA64 - port.irq = acpi_register_irq(gsi, ACPI_ACTIVE_HIGH, - ACPI_EDGE_SENSITIVE); + if (HCDP_PCI_UART(hcdp_dev)) + port.irq = acpi_register_irq(gsi, + ACPI_ACTIVE_LOW, ACPI_LEVEL_SENSITIVE); + else + port.irq = acpi_register_irq(gsi, + ACPI_ACTIVE_HIGH, ACPI_EDGE_SENSITIVE); #else - port.irq = gsi; + port.irq = gsi; #endif - port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_RESOURCES; - if (gsi) port.flags |= UPF_AUTO_IRQ; + if (HCDP_PCI_UART(hcdp_dev)) + port.flags |= UPF_SHARE_IRQ; + } + + port.flags |= UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_RESOURCES; + /* * Note: the above memset() initializes port.line to 0, * so we register this port as ttyS0. @@ -197,8 +209,15 @@ setup_serial_hcdp(void *tablep) printk("setup_serial_hcdp(): early_serial_setup() " "for HCDP serial console port failed. " "Will try any additional consoles in HCDP.\n"); + memset(&port, 0, sizeof(port)); continue; } + + if (efi_uart_console_only()) { + snprintf(options, sizeof(options), "%lun%d", + hcdp_dev->baud, hcdp_dev->bits); + add_preferred_console("ttyS", port.line, options); + } break; } diff --git a/drivers/serial/8250_hcdp.h b/drivers/serial/8250_hcdp.h index 8ee1b60bc430..fa956a1c8f06 100644 --- a/drivers/serial/8250_hcdp.h +++ b/drivers/serial/8250_hcdp.h @@ -77,3 +77,6 @@ typedef struct { u32 num_entries; hcdp_dev_t hcdp_dev[MAX_HCDP_DEVICES]; } hcdp_t; + +#define HCDP_PCI_UART(x) (x->pci_func & 1UL<<7) +#define HCDP_IRQ_SUPPORTED(x) (x->pci_func & 1UL<<6) diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 3d430adfe33a..cf42b9d0c2fa 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c @@ -20,6 +20,7 @@ #include <linux/string.h> #include <linux/kernel.h> #include <linux/slab.h> +#include <linux/delay.h> #include <linux/tty.h> #include <linux/serial.h> #include <linux/serial_core.h> @@ -305,6 +306,72 @@ static void __devexit pci_plx9050_exit(struct pci_dev *dev) } } +/* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */ +static int +sbs_setup(struct pci_dev *dev, struct pci_board *board, + struct serial_struct *req, int idx) +{ + unsigned int bar, offset = board->first_offset; + + bar = 0; + + if (idx < 4) { + /* first four channels map to 0, 0x100, 0x200, 0x300 */ + offset += idx * board->uart_offset; + } else if (idx < 8) { + /* last four channels map to 0x1000, 0x1100, 0x1200, 0x1300 */ + offset += idx * board->uart_offset + 0xC00; + } else /* we have only 8 ports on PMC-OCTALPRO */ + return 1; + + return setup_port(dev, req, bar, offset, board->reg_shift); +} + +/* +* This does initialization for PMC OCTALPRO cards: +* maps the device memory, resets the UARTs (needed, bc +* if the module is removed and inserted again, the card +* is in the sleep mode) and enables global interrupt. +*/ + +/* global control register offset for SBS PMC-OctalPro */ +#define OCT_REG_CR_OFF 0x500 + +static int __devinit sbs_init(struct pci_dev *dev) +{ + u8 * p; + + p = ioremap(pci_resource_start(dev, 0),pci_resource_len(dev,0)); + + if (p == NULL) + return -ENOMEM; + /* Set bit-4 Control Register (UART RESET) in to reset the uarts */ + writeb(0x10,p + OCT_REG_CR_OFF); + udelay(50); + writeb(0x0,p + OCT_REG_CR_OFF); + + /* Set bit-2 (INTENABLE) of Control Register */ + writeb(0x4, p + OCT_REG_CR_OFF); + iounmap(p); + + return 0; +} + +/* + * Disables the global interrupt of PMC-OctalPro + */ + +static void __devexit sbs_exit(struct pci_dev *dev) +{ + u8 * p; + + p = ioremap(pci_resource_start(dev, 0),pci_resource_len(dev,0)); + if (p != NULL) { + writeb(0, p + OCT_REG_CR_OFF); + } + iounmap(p); +} + /* * SIIG serial cards have an PCI interface chip which also controls * the UART clocking frequency. Each UART can be clocked independently @@ -534,6 +601,15 @@ pci_default_setup(struct pci_dev *dev, struct pci_board *board, return setup_port(dev, req, bar, offset, board->reg_shift); } +/* This should be in linux/pci_ids.h */ +#define PCI_VENDOR_ID_SBSMODULARIO 0x124B +#define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B +#define PCI_DEVICE_ID_OCTPRO 0x0001 +#define PCI_SUBDEVICE_ID_OCTPRO232 0x0108 +#define PCI_SUBDEVICE_ID_OCTPRO422 0x0208 +#define PCI_SUBDEVICE_ID_POCTAL232 0x0308 +#define PCI_SUBDEVICE_ID_POCTAL422 0x0408 + /* * Master list of serial port init/setup/exit quirks. * This does not describe the general nature of the port. @@ -619,6 +695,55 @@ static struct pci_serial_quirk pci_serial_quirks[] = { .exit = __devexit_p(pci_plx9050_exit), }, /* + * SBS Technologies, Inc., PMC-OCTALPRO 232 + */ + { + .vendor = PCI_VENDOR_ID_SBSMODULARIO, + .device = PCI_DEVICE_ID_OCTPRO, + .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, + .subdevice = PCI_SUBDEVICE_ID_OCTPRO232, + .init = sbs_init, + .setup = sbs_setup, + .exit = sbs_exit + }, + /* + * SBS Technologies, Inc., PMC-OCTALPRO 422 + */ + { + .vendor = PCI_VENDOR_ID_SBSMODULARIO, + .device = PCI_DEVICE_ID_OCTPRO, + .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, + .subdevice = PCI_SUBDEVICE_ID_OCTPRO422, + .init = sbs_init, + .setup = sbs_setup, + .exit = sbs_exit + }, + /* + * SBS Technologies, Inc., P-Octal 232 + */ + { + .vendor = PCI_VENDOR_ID_SBSMODULARIO, + .device = PCI_DEVICE_ID_OCTPRO, + .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, + .subdevice = PCI_SUBDEVICE_ID_POCTAL232, + .init = sbs_init, + .setup = sbs_setup, + .exit = sbs_exit + }, + /* + * SBS Technologies, Inc., P-Octal 422 + */ + { + .vendor = PCI_VENDOR_ID_SBSMODULARIO, + .device = PCI_DEVICE_ID_OCTPRO, + .subvendor = PCI_SUBVENDOR_ID_SBSMODULARIO, + .subdevice = PCI_SUBDEVICE_ID_POCTAL422, + .init = sbs_init, + .setup = sbs_setup, + .exit = sbs_exit + }, + + /* * SIIG cards. * It is not clear whether these could be collapsed. */ @@ -944,8 +1069,19 @@ enum pci_board_num_t { pbn_computone_4, pbn_computone_6, pbn_computone_8, + pbn_sbsxrsio, }; +/* + * uart_offset - the space between channels + * reg_shift - describes how the UART registers are mapped + * to PCI memory by the card. + * For example IER register on SBS, Inc. PMC-OctPro is located at + * offset 0x10 from the UART base, while UART_IER is defined as 1 + * in include/linux/serial_reg.h, + * see first lines of serial_in() and serial_out() in 8250.c +*/ + static struct pci_board pci_boards[] __devinitdata = { [pbn_default] = { .flags = FL_BASE0, @@ -1348,6 +1484,13 @@ static struct pci_board pci_boards[] __devinitdata = { .reg_shift = 2, .first_offset = 0x200, }, + [pbn_sbsxrsio] = { + .flags = FL_BASE0, + .num_ports = 8, + .base_baud = 460800, + .uart_offset = 256, + .reg_shift = 4, + } }; /* @@ -1755,28 +1898,45 @@ static struct pci_device_id serial_pci_tbl[] = { 0x10b5, 0x106a, 0, 0, pbn_plx_romulus }, { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_4_115200 }, { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_2_115200 }, { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_8_115200 }, { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_8_115200 }, { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954, - PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0, + PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0, pbn_b0_4_921600 }, { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b0_4_115200 }, { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b0_bt_2_921600 }, /* + * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards, + * from skokodyn@yahoo.com + */ + { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, + PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0, + pbn_sbsxrsio }, + { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, + PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0, + pbn_sbsxrsio }, + { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, + PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0, + pbn_sbsxrsio }, + { PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO, + PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0, + pbn_sbsxrsio }, + + /* * Digitan DS560-558, from jimd@esoft.com */ { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM, diff --git a/include/linux/efi.h b/include/linux/efi.h index b29c8d42178f..536b82838671 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -212,6 +212,9 @@ typedef efi_status_t efi_set_virtual_address_map_t (unsigned long memory_map_siz #define UGA_IO_PROTOCOL_GUID \ EFI_GUID( 0x61a4d49e, 0x6f68, 0x4f1b, 0xb9, 0x22, 0xa8, 0x6e, 0xed, 0xb, 0x7, 0xa2 ) +#define EFI_GLOBAL_VARIABLE_GUID \ + EFI_GUID( 0x8be4df61, 0x93ca, 0x11d2, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c ) + typedef struct { efi_guid_t guid; unsigned long table; @@ -294,6 +297,7 @@ extern void efi_enter_virtual_mode (void); /* switch EFI to virtual mode, if pos extern u64 efi_get_iobase (void); extern u32 efi_mem_type (unsigned long phys_addr); extern u64 efi_mem_attributes (unsigned long phys_addr); +extern int __init efi_uart_console_only (void); extern void efi_initialize_iomem_resources(struct resource *code_resource, struct resource *data_resource); extern efi_status_t phys_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc); @@ -322,6 +326,49 @@ extern struct efi_memory_map memmap; #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 #define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004 +/* + * EFI Device Path information + */ +#define EFI_DEV_HW 0x01 +#define EFI_DEV_PCI 1 +#define EFI_DEV_PCCARD 2 +#define EFI_DEV_MEM_MAPPED 3 +#define EFI_DEV_VENDOR 4 +#define EFI_DEV_CONTROLLER 5 +#define EFI_DEV_ACPI 0x02 +#define EFI_DEV_BASIC_ACPI 1 +#define EFI_DEV_EXPANDED_ACPI 2 +#define EFI_DEV_MSG 0x03 +#define EFI_DEV_MSG_ATAPI 1 +#define EFI_DEV_MSG_SCSI 2 +#define EFI_DEV_MSG_FC 3 +#define EFI_DEV_MSG_1394 4 +#define EFI_DEV_MSG_USB 5 +#define EFI_DEV_MSG_USB_CLASS 15 +#define EFI_DEV_MSG_I20 6 +#define EFI_DEV_MSG_MAC 11 +#define EFI_DEV_MSG_IPV4 12 +#define EFI_DEV_MSG_IPV6 13 +#define EFI_DEV_MSG_INFINIBAND 9 +#define EFI_DEV_MSG_UART 14 +#define EFI_DEV_MSG_VENDOR 10 +#define EFI_DEV_MEDIA 0x04 +#define EFI_DEV_MEDIA_HARD_DRIVE 1 +#define EFI_DEV_MEDIA_CDROM 2 +#define EFI_DEV_MEDIA_VENDOR 3 +#define EFI_DEV_MEDIA_FILE 4 +#define EFI_DEV_MEDIA_PROTOCOL 5 +#define EFI_DEV_BIOS_BOOT 0x05 +#define EFI_DEV_END_PATH 0x7F +#define EFI_DEV_END_PATH2 0xFF +#define EFI_DEV_END_INSTANCE 0x01 +#define EFI_DEV_END_ENTIRE 0xFF + +struct efi_generic_dev_path { + u8 type; + u8 sub_type; + u16 length; +} __attribute ((packed)); /* * efi_dir is allocated in arch/ia64/kernel/efi.c. diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 8c54e3e81d22..d13a9f37e145 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -811,9 +811,9 @@ asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr, wait.msg = (void *) msg_ptr; wait.state = STATE_NONE; ret = wq_sleep(info, SEND, timeout, &wait); - if (ret < 0) - free_msg(msg_ptr); } + if (ret < 0) + free_msg(msg_ptr); } else { receiver = wq_get_first_waiter(info, RECV); if (receiver) { diff --git a/kernel/printk.c b/kernel/printk.c index 5f2b3c9bbd6e..3b74688184a8 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -240,6 +240,7 @@ __setup("log_buf_len=", log_buf_len_setup); * 7 -- Enable printk's to console * 8 -- Set level of messages printed to console * 9 -- Return number of unread characters in the log buffer + * 10 -- Return size of the log buffer */ int do_syslog(int type, char __user * buf, int len) { @@ -359,6 +360,9 @@ int do_syslog(int type, char __user * buf, int len) case 9: /* Number of chars in the log buffer */ error = log_end - log_start; break; + case 10: /* Size of the log buffer */ + error = log_buf_len; + break; default: error = -EINVAL; break; |
