Commit ddc4b477 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/net-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 1de95269 df42471d
...@@ -828,13 +828,27 @@ static void pci_do_settimeofday(struct timeval *tv) ...@@ -828,13 +828,27 @@ static void pci_do_settimeofday(struct timeval *tv)
* made, and then undo it! * made, and then undo it!
*/ */
tv->tv_usec -= do_gettimeoffset(); tv->tv_usec -= do_gettimeoffset();
tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ); tv->tv_usec -= (jiffies - wall_jiffies) * (USEC_PER_SEC / HZ);
while (tv->tv_usec < 0) { while (tv->tv_usec < 0) {
tv->tv_usec += 1000000; tv->tv_usec += USEC_PER_SEC;
tv->tv_sec--; tv->tv_sec--;
} }
tv->tv_usec *= NSEC_PER_USEC;
wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec;
wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_usec;
if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) {
wall_to_monotonic.tv_nsec -= NSEC_PER_SEC;
wall_to_monotonic.tv_sec++;
}
if (wall_to_monotonic.tv_nsec < 0) {
wall_to_monotonic.tv_nsec += NSEC_PER_SEC;
wall_to_monotonic.tv_sec--;
}
xtime.tv_sec = tv->tv_sec; xtime.tv_sec = tv->tv_sec;
xtime.tv_nsec = (tv->tv_usec * 1000); xtime.tv_nsec = tv->tv_usec;
time_adjust = 0; /* stop active adjtime() */ time_adjust = 0; /* stop active adjtime() */
time_status |= STA_UNSYNC; time_status |= STA_UNSYNC;
time_maxerror = NTP_PHASE_LIMIT; time_maxerror = NTP_PHASE_LIMIT;
......
...@@ -408,7 +408,9 @@ void __init sbus_time_init(void) ...@@ -408,7 +408,9 @@ void __init sbus_time_init(void)
mon = MSTK_REG_MONTH(mregs); mon = MSTK_REG_MONTH(mregs);
year = MSTK_CVT_YEAR( MSTK_REG_YEAR(mregs) ); year = MSTK_CVT_YEAR( MSTK_REG_YEAR(mregs) );
xtime.tv_sec = mktime(year, mon, day, hour, min, sec); xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
xtime.tv_nsec = 0; wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
wall_to_monotonic.tv_nsec = 0;
mregs->creg &= ~MSTK_CREG_READ; mregs->creg &= ~MSTK_CREG_READ;
spin_unlock_irq(&mostek_lock); spin_unlock_irq(&mostek_lock);
#ifdef CONFIG_SUN4 #ifdef CONFIG_SUN4
...@@ -439,7 +441,9 @@ void __init sbus_time_init(void) ...@@ -439,7 +441,9 @@ void __init sbus_time_init(void)
intersil_start(iregs); intersil_start(iregs);
xtime.tv_sec = mktime(year, mon, day, hour, min, sec); xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
xtime.tv_nsec = 0; wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
wall_to_monotonic.tv_nsec = 0;
printk("%u/%u/%u %u:%u:%u\n",day,mon,year,hour,min,sec); printk("%u/%u/%u %u:%u:%u\n",day,mon,year,hour,min,sec);
} }
#endif #endif
...@@ -512,13 +516,28 @@ static void sbus_do_settimeofday(struct timeval *tv) ...@@ -512,13 +516,28 @@ static void sbus_do_settimeofday(struct timeval *tv)
* made, and then undo it! * made, and then undo it!
*/ */
tv->tv_usec -= do_gettimeoffset(); tv->tv_usec -= do_gettimeoffset();
tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ); tv->tv_usec -= (jiffies - wall_jiffies) * (USEC_PER_SEC / HZ);
while (tv->tv_usec < 0) { while (tv->tv_usec < 0) {
tv->tv_usec += 1000000; tv->tv_usec += USEC_PER_SEC;
tv->tv_sec--; tv->tv_sec--;
} }
tv->tv_usec *= NSEC_PER_USEC;
wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec;
wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_usec;
if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) {
wall_to_monotonic.tv_nsec -= NSEC_PER_SEC;
wall_to_monotonic.tv_sec++;
}
if (wall_to_monotonic.tv_nsec < 0) {
wall_to_monotonic.tv_nsec += NSEC_PER_SEC;
wall_to_monotonic.tv_sec--;
}
xtime.tv_sec = tv->tv_sec; xtime.tv_sec = tv->tv_sec;
xtime.tv_nsec = (tv->tv_usec * 1000); xtime.tv_nsec = tv->tv_usec;
time_adjust = 0; /* stop active adjtime() */ time_adjust = 0; /* stop active adjtime() */
time_status |= STA_UNSYNC; time_status |= STA_UNSYNC;
time_maxerror = NTP_PHASE_LIMIT; time_maxerror = NTP_PHASE_LIMIT;
......
...@@ -334,7 +334,30 @@ CONFIG_FUSION_LAN=m ...@@ -334,7 +334,30 @@ CONFIG_FUSION_LAN=m
# #
# IEEE 1394 (FireWire) support (EXPERIMENTAL) # IEEE 1394 (FireWire) support (EXPERIMENTAL)
# #
# CONFIG_IEEE1394 is not set CONFIG_IEEE1394=m
#
# Subsystem Options
#
# CONFIG_IEEE1394_VERBOSEDEBUG is not set
CONFIG_IEEE1394_OUI_DB=y
#
# Device Drivers
#
CONFIG_IEEE1394_OHCI1394=m
#
# Protocol Drivers
#
CONFIG_IEEE1394_VIDEO1394=m
CONFIG_IEEE1394_SBP2=m
# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
CONFIG_IEEE1394_ETH1394=m
CONFIG_IEEE1394_DV1394=m
CONFIG_IEEE1394_RAWIO=m
CONFIG_IEEE1394_CMP=m
CONFIG_IEEE1394_AMDTP=m
# #
# Networking support # Networking support
......
...@@ -224,7 +224,7 @@ int chmc_getunumber(int syndrome_code, ...@@ -224,7 +224,7 @@ int chmc_getunumber(int syndrome_code,
int dimm; int dimm;
/* Multi-bit error, we just dump out all the /* Multi-bit error, we just dump out all the
* dimm labels assosciated with this bank. * dimm labels associated with this bank.
*/ */
for (dimm = 0; dimm < CHMCTRL_NDIMMS; dimm++) { for (dimm = 0; dimm < CHMCTRL_NDIMMS; dimm++) {
sprintf(buf, "%s ", sprintf(buf, "%s ",
......
...@@ -1264,7 +1264,7 @@ dcpe_icpe_tl1_common: ...@@ -1264,7 +1264,7 @@ dcpe_icpe_tl1_common:
* because corrupt data may have been placed there and we don't * because corrupt data may have been placed there and we don't
* want to reference it. * want to reference it.
* *
* %g1 is one if this trap occured at %tl >= 1. * %g1 is one if this trap occurred at %tl >= 1.
* *
* Next, we turn off error reporting so that we don't recurse. * Next, we turn off error reporting so that we don't recurse.
*/ */
......
...@@ -84,7 +84,7 @@ sparc64_boot: ...@@ -84,7 +84,7 @@ sparc64_boot:
nop nop
cheetah_plus_boot: cheetah_plus_boot:
/* Preserve OBP choosen DCU and DCR register settings. */ /* Preserve OBP chosen DCU and DCR register settings. */
ba,pt %xcc, cheetah_generic_boot ba,pt %xcc, cheetah_generic_boot
nop nop
......
...@@ -3137,7 +3137,7 @@ typedef struct drm32_dma { ...@@ -3137,7 +3137,7 @@ typedef struct drm32_dma {
#define DRM32_IOCTL_DMA DRM_IOWR(0x29, drm32_dma_t) #define DRM32_IOCTL_DMA DRM_IOWR(0x29, drm32_dma_t)
/* RED PEN The DRM layer blindly dereferences the send/request /* RED PEN The DRM layer blindly dereferences the send/request
* indice/size arrays even though they are userland * index/size arrays even though they are userland
* pointers. -DaveM * pointers. -DaveM
*/ */
static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg) static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg)
...@@ -4243,6 +4243,8 @@ COMPATIBLE_IOCTL(DVD_AUTH) ...@@ -4243,6 +4243,8 @@ COMPATIBLE_IOCTL(DVD_AUTH)
/* Big L */ /* Big L */
COMPATIBLE_IOCTL(LOOP_SET_FD) COMPATIBLE_IOCTL(LOOP_SET_FD)
COMPATIBLE_IOCTL(LOOP_CLR_FD) COMPATIBLE_IOCTL(LOOP_CLR_FD)
COMPATIBLE_IOCTL(LOOP_SET_STATUS64)
COMPATIBLE_IOCTL(LOOP_GET_STATUS64)
/* Big A */ /* Big A */
COMPATIBLE_IOCTL(AUDIO_GETINFO) COMPATIBLE_IOCTL(AUDIO_GETINFO)
COMPATIBLE_IOCTL(AUDIO_SETINFO) COMPATIBLE_IOCTL(AUDIO_SETINFO)
......
...@@ -145,7 +145,7 @@ static void __init pdev_cookie_fillin(struct pci_pbm_info *pbm, ...@@ -145,7 +145,7 @@ static void __init pdev_cookie_fillin(struct pci_pbm_info *pbm,
* there must be a damn good reason for it. * there must be a damn good reason for it.
* *
* So what we do is delete the device from the * So what we do is delete the device from the
* PCI device tree completely. This scenerio * PCI device tree completely. This scenario
* is seen, for example, on CP1500 for the * is seen, for example, on CP1500 for the
* second EBUS/HappyMeal pair if the external * second EBUS/HappyMeal pair if the external
* connector for it is not present. * connector for it is not present.
......
...@@ -854,7 +854,7 @@ static irqreturn_t psycho_ce_intr(int irq, void *dev_id, struct pt_regs *regs) ...@@ -854,7 +854,7 @@ static irqreturn_t psycho_ce_intr(int irq, void *dev_id, struct pt_regs *regs)
} }
/* PCI Errors. They are signalled by the PCI bus module since they /* PCI Errors. They are signalled by the PCI bus module since they
* are assosciated with a specific bus segment. * are associated with a specific bus segment.
*/ */
#define PSYCHO_PCI_AFSR_A 0x2010UL #define PSYCHO_PCI_AFSR_A 0x2010UL
#define PSYCHO_PCI_AFSR_B 0x4010UL #define PSYCHO_PCI_AFSR_B 0x4010UL
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Based upon code written by Ross Biro, Linus Torvalds, Bob Manson, * Based upon code written by Ross Biro, Linus Torvalds, Bob Manson,
* and David Mosberger. * and David Mosberger.
* *
* Added Linux support -miguel (weird, eh?, the orignal code was meant * Added Linux support -miguel (weird, eh?, the original code was meant
* to emulate SunOS). * to emulate SunOS).
*/ */
......
...@@ -210,7 +210,7 @@ __handle_user_windows_continue: ...@@ -210,7 +210,7 @@ __handle_user_windows_continue:
__handle_perfctrs_continue: __handle_perfctrs_continue:
andcc %l1, %o0, %g0 andcc %l1, %o0, %g0
/* This fpdepth clear is neccessary for non-syscall rtraps only */ /* This fpdepth clear is necessary for non-syscall rtraps only */
user_nowork: user_nowork:
bne,pn %xcc, __handle_userfpu bne,pn %xcc, __handle_userfpu
stb %g0, [%g6 + TI_FPDEPTH] stb %g0, [%g6 + TI_FPDEPTH]
......
...@@ -728,7 +728,7 @@ static unsigned long sysio_irq_offsets[] = { ...@@ -728,7 +728,7 @@ static unsigned long sysio_irq_offsets[] = {
#define NUM_SYSIO_OFFSETS (sizeof(sysio_irq_offsets) / sizeof(sysio_irq_offsets[0])) #define NUM_SYSIO_OFFSETS (sizeof(sysio_irq_offsets) / sizeof(sysio_irq_offsets[0]))
/* Convert Interrupt Mapping register pointer to assosciated /* Convert Interrupt Mapping register pointer to associated
* Interrupt Clear register pointer, SYSIO specific version. * Interrupt Clear register pointer, SYSIO specific version.
*/ */
#define SYSIO_ICLR_UNUSED0 0x3400UL #define SYSIO_ICLR_UNUSED0 0x3400UL
...@@ -1098,7 +1098,7 @@ void __init sbus_iommu_init(int prom_node, struct sbus_bus *sbus) ...@@ -1098,7 +1098,7 @@ void __init sbus_iommu_init(int prom_node, struct sbus_bus *sbus)
prom_halt(); prom_halt();
} }
/* Align on E$ line boundry. */ /* Align on E$ line boundary. */
iommu = (struct sbus_iommu *) iommu = (struct sbus_iommu *)
(((unsigned long)iommu + (SMP_CACHE_BYTES - 1UL)) & (((unsigned long)iommu + (SMP_CACHE_BYTES - 1UL)) &
~(SMP_CACHE_BYTES - 1UL)); ~(SMP_CACHE_BYTES - 1UL));
......
...@@ -1071,7 +1071,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs) ...@@ -1071,7 +1071,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs)
prof_counter(cpu) = prof_multiplier(cpu); prof_counter(cpu) = prof_multiplier(cpu);
} }
/* Guarentee that the following sequences execute /* Guarantee that the following sequences execute
* uninterrupted. * uninterrupted.
*/ */
__asm__ __volatile__("rdpr %%pstate, %0\n\t" __asm__ __volatile__("rdpr %%pstate, %0\n\t"
...@@ -1096,7 +1096,7 @@ static void __init smp_setup_percpu_timer(void) ...@@ -1096,7 +1096,7 @@ static void __init smp_setup_percpu_timer(void)
prof_counter(cpu) = prof_multiplier(cpu) = 1; prof_counter(cpu) = prof_multiplier(cpu) = 1;
/* Guarentee that the following sequences execute /* Guarantee that the following sequences execute
* uninterrupted. * uninterrupted.
*/ */
__asm__ __volatile__("rdpr %%pstate, %0\n\t" __asm__ __volatile__("rdpr %%pstate, %0\n\t"
......
...@@ -489,7 +489,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -489,7 +489,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
#endif #endif
do_timer(regs); do_timer(regs);
/* Guarentee that the following sequences execute /* Guarantee that the following sequences execute
* uninterrupted. * uninterrupted.
*/ */
__asm__ __volatile__("rdpr %%pstate, %0\n\t" __asm__ __volatile__("rdpr %%pstate, %0\n\t"
...@@ -703,7 +703,9 @@ static void __init set_system_time(void) ...@@ -703,7 +703,9 @@ static void __init set_system_time(void)
} }
xtime.tv_sec = mktime(year, mon, day, hour, min, sec); xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
xtime.tv_nsec = 0; wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
wall_to_monotonic.tv_nsec = 0;
if (mregs) { if (mregs) {
tmp = mostek_read(mregs + MOSTEK_CREG); tmp = mostek_read(mregs + MOSTEK_CREG);
...@@ -741,7 +743,9 @@ void __init clock_probe(void) ...@@ -741,7 +743,9 @@ void __init clock_probe(void)
(unsigned int) (long) &unix_tod); (unsigned int) (long) &unix_tod);
prom_feval(obp_gettod); prom_feval(obp_gettod);
xtime.tv_sec = unix_tod; xtime.tv_sec = unix_tod;
xtime.tv_nsec = 0; wall_to_monotonic.tv_sec = -xtime.tv_sec + INITIAL_JIFFIES / HZ;
xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
wall_to_monotonic.tv_nsec = 0;
return; return;
} }
...@@ -972,7 +976,7 @@ static unsigned long sparc64_init_timers(irqreturn_t (*cfunc)(int, void *, struc ...@@ -972,7 +976,7 @@ static unsigned long sparc64_init_timers(irqreturn_t (*cfunc)(int, void *, struc
prom_halt(); prom_halt();
} }
/* Guarentee that the following sequences execute /* Guarantee that the following sequences execute
* uninterrupted. * uninterrupted.
*/ */
__asm__ __volatile__("rdpr %%pstate, %0\n\t" __asm__ __volatile__("rdpr %%pstate, %0\n\t"
...@@ -1097,15 +1101,28 @@ void do_settimeofday(struct timeval *tv) ...@@ -1097,15 +1101,28 @@ void do_settimeofday(struct timeval *tv)
* made, and then undo it! * made, and then undo it!
*/ */
tv->tv_usec -= do_gettimeoffset(); tv->tv_usec -= do_gettimeoffset();
tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ); tv->tv_usec -= (jiffies - wall_jiffies) * (USEC_PER_SEC / HZ);
while (tv->tv_usec < 0) { while (tv->tv_usec < 0) {
tv->tv_usec += 1000000; tv->tv_usec += USEC_PER_SEC;
tv->tv_sec--; tv->tv_sec--;
} }
tv->tv_usec *= NSEC_PER_USEC;
wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec;
wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_usec;
if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) {
wall_to_monotonic.tv_nsec -= NSEC_PER_SEC;
wall_to_monotonic.tv_sec++;
}
if (wall_to_monotonic.tv_nsec < 0) {
wall_to_monotonic.tv_nsec += NSEC_PER_SEC;
wall_to_monotonic.tv_sec--;
}
xtime.tv_sec = tv->tv_sec; xtime.tv_sec = tv->tv_sec;
xtime.tv_nsec = (tv->tv_usec * 1000); xtime.tv_nsec = tv->tv_usec;
time_adjust = 0; /* stop active adjtime() */ time_adjust = 0; /* stop active adjtime() */
time_status |= STA_UNSYNC; time_status |= STA_UNSYNC;
time_maxerror = NTP_PHASE_LIMIT; time_maxerror = NTP_PHASE_LIMIT;
......
...@@ -40,7 +40,7 @@ sparc64_cpu_startup: ...@@ -40,7 +40,7 @@ sparc64_cpu_startup:
nop nop
cheetah_plus_startup: cheetah_plus_startup:
/* Preserve OBP choosen DCU and DCR register settings. */ /* Preserve OBP chosen DCU and DCR register settings. */
ba,pt %xcc, cheetah_generic_startup ba,pt %xcc, cheetah_generic_startup
nop nop
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Copyright (c) 2002 Pete Zaitcev (zaitcev@yahoo.com) * Copyright (c) 2002 Pete Zaitcev (zaitcev@yahoo.com)
* *
* We used to warn all over the code: DO NOT USE prom_printf(), * We used to warn all over the code: DO NOT USE prom_printf(),
* and yet people do. Anton's banking code was outputing banks * and yet people do. Anton's banking code was outputting banks
* with prom_printf for most of the 2.4 lifetime. Since an effective * with prom_printf for most of the 2.4 lifetime. Since an effective
* stick is not available, we deployed a carrot: an early printk * stick is not available, we deployed a carrot: an early printk
* through PROM by means of -p boot option. This ought to fix it. * through PROM by means of -p boot option. This ought to fix it.
......
/* $Id: misc.c,v 1.36 2002/02/09 19:49:31 davem Exp $ /* $Id: misc.c,v 1.36 2002/02/09 19:49:31 davem Exp $
* misc.c: Miscelaneous syscall emulation for Solaris * misc.c: Miscellaneous syscall emulation for Solaris
* *
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*/ */
......
...@@ -2164,8 +2164,7 @@ int end_that_request_chunk(struct request *req, int uptodate, int nr_bytes) ...@@ -2164,8 +2164,7 @@ int end_that_request_chunk(struct request *req, int uptodate, int nr_bytes)
void end_that_request_last(struct request *req) void end_that_request_last(struct request *req)
{ {
struct gendisk *disk = req->rq_disk; struct gendisk *disk = req->rq_disk;
if (req->waiting) struct completion *waiting = req->waiting;
complete(req->waiting);
if (disk) { if (disk) {
unsigned long duration = jiffies - req->start_time; unsigned long duration = jiffies - req->start_time;
...@@ -2183,6 +2182,9 @@ void end_that_request_last(struct request *req) ...@@ -2183,6 +2182,9 @@ void end_that_request_last(struct request *req)
disk_stat_dec(disk, in_flight); disk_stat_dec(disk, in_flight);
} }
__blk_put_request(req->q, req); __blk_put_request(req->q, req);
/* Do this LAST! The structure may be freed immediately afterwards */
if (waiting)
complete(waiting);
} }
int __init blk_dev_init(void) int __init blk_dev_init(void)
......
...@@ -149,6 +149,7 @@ struct cardinfo { ...@@ -149,6 +149,7 @@ struct cardinfo {
spinlock_t lock; spinlock_t lock;
int check_batteries; int check_batteries;
int flags;
}; };
static struct cardinfo cards[MM_MAXCARDS]; static struct cardinfo cards[MM_MAXCARDS];
...@@ -573,7 +574,7 @@ static int mm_make_request(request_queue_t *q, struct bio *bio) ...@@ -573,7 +574,7 @@ static int mm_make_request(request_queue_t *q, struct bio *bio)
-- mm_interrupt -- mm_interrupt
----------------------------------------------------------------------------------- -----------------------------------------------------------------------------------
*/ */
static void mm_interrupt(int irq, void *__card, struct pt_regs *regs) static irqreturn_t mm_interrupt(int irq, void *__card, struct pt_regs *regs)
{ {
struct cardinfo *card = (struct cardinfo *) __card; struct cardinfo *card = (struct cardinfo *) __card;
unsigned int dma_status; unsigned int dma_status;
...@@ -585,13 +586,16 @@ HW_TRACE(0x30); ...@@ -585,13 +586,16 @@ HW_TRACE(0x30);
if (!(dma_status & (DMASCR_ERROR_MASK | DMASCR_CHAIN_COMPLETE))) { if (!(dma_status & (DMASCR_ERROR_MASK | DMASCR_CHAIN_COMPLETE))) {
/* interrupt wasn't for me ... */ /* interrupt wasn't for me ... */
return; return IRQ_NONE;
} }
/* clear COMPLETION interrupts */ /* clear COMPLETION interrupts */
writel(cpu_to_le32(DMASCR_DMA_COMPLETE|DMASCR_CHAIN_COMPLETE), if (card->flags & UM_FLAG_NO_BYTE_STATUS)
card->csr_remap+ DMA_STATUS_CTRL); writel(cpu_to_le32(DMASCR_DMA_COMPLETE|DMASCR_CHAIN_COMPLETE),
card->csr_remap+ DMA_STATUS_CTRL);
else
writeb((DMASCR_DMA_COMPLETE|DMASCR_CHAIN_COMPLETE) >> 16,
card->csr_remap+ DMA_STATUS_CTRL + 2);
/* log errors and clear interrupt status */ /* log errors and clear interrupt status */
if (dma_status & DMASCR_ANY_ERR) { if (dma_status & DMASCR_ANY_ERR) {
...@@ -663,6 +667,7 @@ HW_TRACE(0x30); ...@@ -663,6 +667,7 @@ HW_TRACE(0x30);
HW_TRACE(0x36); HW_TRACE(0x36);
return IRQ_HANDLED;
} }
/* /*
----------------------------------------------------------------------------------- -----------------------------------------------------------------------------------
...@@ -755,15 +760,16 @@ static void check_all_batteries(unsigned long ptr) ...@@ -755,15 +760,16 @@ static void check_all_batteries(unsigned long ptr)
{ {
int i; int i;
for (i = 0; i < num_cards; i++) { for (i = 0; i < num_cards; i++)
struct cardinfo *card = &cards[i]; if (!(cards[i].flags & UM_FLAG_NO_BATT)) {
spin_lock_bh(&card->lock); struct cardinfo *card = &cards[i];
if (card->Active >= 0) spin_lock_bh(&card->lock);
card->check_batteries = 1; if (card->Active >= 0)
else card->check_batteries = 1;
check_batteries(card); else
spin_unlock_bh(&card->lock); check_batteries(card);
} spin_unlock_bh(&card->lock);
}
init_battery_timer(); init_battery_timer();
} }
...@@ -869,6 +875,7 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i ...@@ -869,6 +875,7 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i
unsigned char mem_present; unsigned char mem_present;
unsigned char batt_status; unsigned char batt_status;
unsigned int saved_bar, data; unsigned int saved_bar, data;
int magic_number;
if (pci_enable_device(dev) < 0) if (pci_enable_device(dev) < 0)
return -ENODEV; return -ENODEV;
...@@ -933,12 +940,33 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i ...@@ -933,12 +940,33 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i
printk(KERN_INFO "MM%d: MEM area not remapped (CONFIG_MM_MAP_MEMORY not set)\n", printk(KERN_INFO "MM%d: MEM area not remapped (CONFIG_MM_MAP_MEMORY not set)\n",
card->card_number); card->card_number);
#endif #endif
if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != MM_MAGIC_VALUE) { switch(card->dev->device) {
case 0x5415:
card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG;
magic_number = 0x59;
break;
case 0x5425:
card->flags |= UM_FLAG_NO_BYTE_STATUS;
magic_number = 0x5C;
break;
case 0x6155:
card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG | UM_FLAG_NO_BATT;
magic_number = 0x99;
break;
default:
magic_number = 0x100;
break;
}
if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) {
printk(KERN_ERR "MM%d: Magic number invalid\n", card->card_number); printk(KERN_ERR "MM%d: Magic number invalid\n", card->card_number);
ret = -ENOMEM; ret = -ENOMEM;
goto failed_magic; goto failed_magic;
} }
card->mm_pages[0].desc = pci_alloc_consistent(card->dev, card->mm_pages[0].desc = pci_alloc_consistent(card->dev,
PAGE_SIZE*2, PAGE_SIZE*2,
&card->mm_pages[0].page_dma); &card->mm_pages[0].page_dma);
...@@ -997,14 +1025,19 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i ...@@ -997,14 +1025,19 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i
card->battery[1].good = !(batt_status & BATTERY_2_FAILURE); card->battery[1].good = !(batt_status & BATTERY_2_FAILURE);
card->battery[0].last_change = card->battery[1].last_change = jiffies; card->battery[0].last_change = card->battery[1].last_change = jiffies;
printk(KERN_INFO "MM%d: Size %d KB, Battery 1 %s (%s), Battery 2 %s (%s)\n", if (card->flags & UM_FLAG_NO_BATT)
card->card_number, card->mm_size, printk(KERN_INFO "MM%d: Size %d KB\n",
(batt_status & BATTERY_1_DISABLED ? "Disabled" : "Enabled"), card->card_number, card->mm_size);
card->battery[0].good ? "OK" : "FAILURE", else {
(batt_status & BATTERY_2_DISABLED ? "Disabled" : "Enabled"), printk(KERN_INFO "MM%d: Size %d KB, Battery 1 %s (%s), Battery 2 %s (%s)\n",
card->battery[1].good ? "OK" : "FAILURE"); card->card_number, card->mm_size,
(batt_status & BATTERY_1_DISABLED ? "Disabled" : "Enabled"),
card->battery[0].good ? "OK" : "FAILURE",
(batt_status & BATTERY_2_DISABLED ? "Disabled" : "Enabled"),
card->battery[1].good ? "OK" : "FAILURE");
set_fault_to_battery_status(card); set_fault_to_battery_status(card);
}
pci_read_config_dword(dev, PCI_BASE_ADDRESS_1, &saved_bar); pci_read_config_dword(dev, PCI_BASE_ADDRESS_1, &saved_bar);
data = 0xffffffff; data = 0xffffffff;
...@@ -1117,6 +1150,16 @@ static const struct pci_device_id __devinitdata mm_pci_ids[] = { { ...@@ -1117,6 +1150,16 @@ static const struct pci_device_id __devinitdata mm_pci_ids[] = { {
}, { }, {
.vendor = PCI_VENDOR_ID_MICRO_MEMORY, .vendor = PCI_VENDOR_ID_MICRO_MEMORY,
.device = PCI_DEVICE_ID_MICRO_MEMORY_5425CN, .device = PCI_DEVICE_ID_MICRO_MEMORY_5425CN,
}, {
.vendor = PCI_VENDOR_ID_MICRO_MEMORY,
.device = PCI_DEVICE_ID_MICRO_MEMORY_6155,
}, {
.vendor = 0x8086,
.device = 0xB555,
.subvendor= 0x1332,
.subdevice= 0x5460,
.class = 0x050000,
.class_mask= 0,
}, { /* end: all zeroes */ } }, { /* end: all zeroes */ }
}; };
......
...@@ -1240,8 +1240,21 @@ int txCommit(tid_t tid, /* transaction identifier */ ...@@ -1240,8 +1240,21 @@ int txCommit(tid_t tid, /* transaction identifier */
* Ensure that inode isn't reused before * Ensure that inode isn't reused before
* lazy commit thread finishes processing * lazy commit thread finishes processing
*/ */
if (tblk->xflag & (COMMIT_CREATE | COMMIT_DELETE)) if (tblk->xflag & (COMMIT_CREATE | COMMIT_DELETE)) {
atomic_inc(&tblk->ip->i_count); atomic_inc(&tblk->ip->i_count);
/*
* Avoid a rare deadlock
*
* If the inode is locked, we may be blocked in
* jfs_commit_inode. If so, we don't want the
* lazy_commit thread doing the last iput() on the inode
* since that may block on the locked inode. Instead,
* commit the transaction synchronously, so the last iput
* will be done by the calling thread (or later)
*/
if (tblk->ip->i_state & I_LOCK)
tblk->xflag &= ~COMMIT_LAZY;
}
ASSERT((!(tblk->xflag & COMMIT_DELETE)) || ASSERT((!(tblk->xflag & COMMIT_DELETE)) ||
((tblk->ip->i_nlink == 0) && ((tblk->ip->i_nlink == 0) &&
......
...@@ -102,13 +102,13 @@ ...@@ -102,13 +102,13 @@
#define ASI_PST8_P 0xc0 /* Primary, 8 8-bit, partial */ #define ASI_PST8_P 0xc0 /* Primary, 8 8-bit, partial */
#define ASI_PST8_S 0xc1 /* Secondary, 8 8-bit, partial */ #define ASI_PST8_S 0xc1 /* Secondary, 8 8-bit, partial */
#define ASI_PST16_P 0xc2 /* Primary, 4 16-bit, partial */ #define ASI_PST16_P 0xc2 /* Primary, 4 16-bit, partial */
#define ASI_PST16_S 0xc3 /* Seconary, 4 16-bit, partial */ #define ASI_PST16_S 0xc3 /* Secondary, 4 16-bit, partial */
#define ASI_PST32_P 0xc4 /* Primary, 2 32-bit, partial */ #define ASI_PST32_P 0xc4 /* Primary, 2 32-bit, partial */
#define ASI_PST32_S 0xc5 /* Secondary, 2 32-bit, partial */ #define ASI_PST32_S 0xc5 /* Secondary, 2 32-bit, partial */
#define ASI_PST8_PL 0xc8 /* Primary, 8 8-bit, partial, little */ #define ASI_PST8_PL 0xc8 /* Primary, 8 8-bit, partial, little */
#define ASI_PST8_SL 0xc9 /* Secondary, 8 8-bit, partial, little */ #define ASI_PST8_SL 0xc9 /* Secondary, 8 8-bit, partial, little */
#define ASI_PST16_PL 0xca /* Primary, 4 16-bit, partial, little */ #define ASI_PST16_PL 0xca /* Primary, 4 16-bit, partial, little */
#define ASI_PST16_SL 0xcb /* Seconary, 4 16-bit, partial, little */ #define ASI_PST16_SL 0xcb /* Secondary, 4 16-bit, partial, little */
#define ASI_PST32_PL 0xcc /* Primary, 2 32-bit, partial, little */ #define ASI_PST32_PL 0xcc /* Primary, 2 32-bit, partial, little */
#define ASI_PST32_SL 0xcd /* Secondary, 2 32-bit, partial, little */ #define ASI_PST32_SL 0xcd /* Secondary, 2 32-bit, partial, little */
#define ASI_FL8_P 0xd0 /* Primary, 1 8-bit, fpu ld/st */ #define ASI_FL8_P 0xd0 /* Primary, 1 8-bit, fpu ld/st */
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* with compliant or compatible devices. It will use whatever features * with compliant or compatible devices. It will use whatever features
* the device supports, prefering those that are typically faster. * the device supports, prefering those that are typically faster.
* *
* When the device is opened, it is left in COMPATABILITY mode, and * When the device is opened, it is left in COMPATIBILITY mode, and
* writes work like any printer device. The driver only attempt to * writes work like any printer device. The driver only attempt to
* negotiate 1284 modes when needed so that plugs can be pulled, * negotiate 1284 modes when needed so that plugs can be pulled,
* switch boxes switched, etc., without disrupting things. It will * switch boxes switched, etc., without disrupting things. It will
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
/* Uncorrectable system bus data ECC error for read of interrupt vector */ /* Uncorrectable system bus data ECC error for read of interrupt vector */
#define CHAFSR_IVU 0x0000200000000000 #define CHAFSR_IVU 0x0000200000000000
/* Unmappeed error from system bus */ /* Unmapped error from system bus */
#define CHAFSR_TO 0x0000100000000000 #define CHAFSR_TO 0x0000100000000000
/* Bus error response from system bus */ /* Bus error response from system bus */
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
/* The AFSR must be explicitly cleared by software, it is not cleared automatically /* The AFSR must be explicitly cleared by software, it is not cleared automatically
* by a read. Writes to bits <51:33> with bits set will clear the corresponding * by a read. Writes to bits <51:33> with bits set will clear the corresponding
* bits in the AFSR. Bits assosciated with disrupting traps must be cleared before * bits in the AFSR. Bits associated with disrupting traps must be cleared before
* interrupts are re-enabled to prevent multiple traps for the same error. I.e. * interrupts are re-enabled to prevent multiple traps for the same error. I.e.
* PSTATE.IE and AFSR bits control delivery of disrupting traps. * PSTATE.IE and AFSR bits control delivery of disrupting traps.
* *
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* errors 2) uncorrectable E-cache errors. Such events only occur on reads * errors 2) uncorrectable E-cache errors. Such events only occur on reads
* of the E-cache by the local processor for: 1) data loads 2) instruction * of the E-cache by the local processor for: 1) data loads 2) instruction
* fetches 3) atomic operations. Such events _cannot_ occur for: 1) merge * fetches 3) atomic operations. Such events _cannot_ occur for: 1) merge
* 2) writeback 2) copyout. The AFSR bits assosciated with these traps are * 2) writeback 2) copyout. The AFSR bits associated with these traps are
* UCC and UCU. * UCC and UCU.
*/ */
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
* 4) As the result of such errors on instruction vector fetch can generate any * 4) As the result of such errors on instruction vector fetch can generate any
* of the 3 trap types. * of the 3 trap types.
* *
* The AFSR bits assosciated with these traps are EMU, EDU, WDU, CPU, IVU, UE, * The AFSR bits associated with these traps are EMU, EDU, WDU, CPU, IVU, UE,
* BERR, and TO. * BERR, and TO.
*/ */
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#define _SPARC_NS87303_H 1 #define _SPARC_NS87303_H 1
/* /*
* Controll Register Index Values * Control Register Index Values
*/ */
#define FER 0x00 #define FER 0x00
#define FAR 0x01 #define FAR 0x01
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
#define TUP_EPP_TIMO 0x02 /* Enable EPP timeout IRQ */ #define TUP_EPP_TIMO 0x02 /* Enable EPP timeout IRQ */
/* Advanced SuperIO Config Register (ASC) bits */ /* Advanced SuperIO Config Register (ASC) bits */
#define ASC_LPT_IRQ7 0x01 /* Allways use IRQ7 for LPT */ #define ASC_LPT_IRQ7 0x01 /* Always use IRQ7 for LPT */
#define ASC_DRV2_SEL 0x02 /* Logical Drive Exchange controlled by TDR */ #define ASC_DRV2_SEL 0x02 /* Logical Drive Exchange controlled by TDR */
#define FER_RESERVED 0x00 #define FER_RESERVED 0x00
......
...@@ -50,7 +50,7 @@ extern void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t ...@@ -50,7 +50,7 @@ extern void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t
* size must be the same as what as passed into pci_alloc_consistent, * size must be the same as what as passed into pci_alloc_consistent,
* and likewise dma_addr must be the same as what *dma_addrp was set to. * and likewise dma_addr must be the same as what *dma_addrp was set to.
* *
* References to the memory and mappings assosciated with cpu_addr/dma_addr * References to the memory and mappings associated with cpu_addr/dma_addr
* past this call are illegal. * past this call are illegal.
*/ */
extern void pci_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle); extern void pci_free_consistent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle);
...@@ -92,7 +92,7 @@ extern void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t ...@@ -92,7 +92,7 @@ extern void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t
(((PTR)->LEN_NAME) = (VAL)) (((PTR)->LEN_NAME) = (VAL))
/* Map a set of buffers described by scatterlist in streaming /* Map a set of buffers described by scatterlist in streaming
* mode for DMA. This is the scather-gather version of the * mode for DMA. This is the scatter-gather version of the
* above pci_map_single interface. Here the scatter gather list * above pci_map_single interface. Here the scatter gather list
* elements are each tagged with the appropriate dma address * elements are each tagged with the appropriate dma address
* and length. They are obtained via sg_dma_{address,length}(SG). * and length. They are obtained via sg_dma_{address,length}(SG).
......
...@@ -85,7 +85,7 @@ enum svr4_stack_flags { ...@@ -85,7 +85,7 @@ enum svr4_stack_flags {
SVR4_SS_DISABLE, SVR4_SS_DISABLE,
}; };
/* signal stack exection place, unsupported */ /* signal stack execution place, unsupported */
typedef struct svr4_stack_t { typedef struct svr4_stack_t {
char *sp; char *sp;
int size; int size;
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#define UPA_PORTID_PREQDQ 0x000000007e000000 /* slave-wr's to mod supported */ #define UPA_PORTID_PREQDQ 0x000000007e000000 /* slave-wr's to mod supported */
#define UPA_PORTID_PREQRD 0x0000000001e00000 /* # incoming P_REQ's supported */ #define UPA_PORTID_PREQRD 0x0000000001e00000 /* # incoming P_REQ's supported */
#define UPA_PORTID_UPACAP 0x00000000001f0000 /* UPA capabilities of mod */ #define UPA_PORTID_UPACAP 0x00000000001f0000 /* UPA capabilities of mod */
#define UPA_PORTID_ID 0x000000000000ffff /* Module Indentification bits */ #define UPA_PORTID_ID 0x000000000000ffff /* Module Identification bits */
/* UPA I/O space accessors */ /* UPA I/O space accessors */
#if defined(__KERNEL__) && !defined(__ASSEMBLY__) #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
......
...@@ -128,4 +128,11 @@ struct mm_dma_desc { ...@@ -128,4 +128,11 @@ struct mm_dma_desc {
#define PCI_VENDOR_ID_MICRO_MEMORY 0x1332 #define PCI_VENDOR_ID_MICRO_MEMORY 0x1332
#define PCI_DEVICE_ID_MICRO_MEMORY_5415CN 0x5415 #define PCI_DEVICE_ID_MICRO_MEMORY_5415CN 0x5415
#define PCI_DEVICE_ID_MICRO_MEMORY_5425CN 0x5425 #define PCI_DEVICE_ID_MICRO_MEMORY_5425CN 0x5425
#define PCI_DEVICE_ID_MICRO_MEMORY_6155 0x6155
/* bits for card->flags */
#define UM_FLAG_DMA_IN_REGS 1
#define UM_FLAG_NO_BYTE_STATUS 2
#define UM_FLAG_NO_BATTREG 4
#define UM_FLAG_NO_BATT 8
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment