diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-02-18 00:24:27 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-02-18 00:24:27 +0000 |
commit | b9558d5f86c471a125abf1fb3a3882fb053b1f8c (patch) | |
tree | 707b53ec64e740a7da87d5f36485e3cd9b1c794e /include/asm-i386 | |
parent | b3ac367c7a3e6047abe74817db27e34e759f279f (diff) |
Merge with Linux 2.3.41.
Diffstat (limited to 'include/asm-i386')
-rw-r--r-- | include/asm-i386/parport.h | 8 | ||||
-rw-r--r-- | include/asm-i386/pci.h | 131 | ||||
-rw-r--r-- | include/asm-i386/semaphore.h | 11 | ||||
-rw-r--r-- | include/asm-i386/siginfo.h | 18 | ||||
-rw-r--r-- | include/asm-i386/termios.h | 1 | ||||
-rw-r--r-- | include/asm-i386/types.h | 4 | ||||
-rw-r--r-- | include/asm-i386/unistd.h | 1 |
7 files changed, 154 insertions, 20 deletions
diff --git a/include/asm-i386/parport.h b/include/asm-i386/parport.h index c08ee4686..1c2855bbe 100644 --- a/include/asm-i386/parport.h +++ b/include/asm-i386/parport.h @@ -39,16 +39,16 @@ parport_pc_init(int *io, int *io_hi, int *irq, int *dma) do { if (!*io_hi) *io_hi = 0x400 + *io; if (parport_pc_probe_port(*(io++), *(io_hi++), - *(irq++), *(dma++))) + *(irq++), *(dma++), NULL)) count++; } while (*io && (++i < PARPORT_PC_MAX_PORTS)); } else { /* Probe all the likely ports. */ - if (parport_pc_probe_port(0x3bc, 0x7bc, irq[0], dma[0])) + if (parport_pc_probe_port(0x3bc, 0x7bc, irq[0], dma[0], NULL)) count++; - if (parport_pc_probe_port(0x378, 0x778, irq[0], dma[0])) + if (parport_pc_probe_port(0x378, 0x778, irq[0], dma[0], NULL)) count++; - if (parport_pc_probe_port(0x278, 0x678, irq[0], dma[0])) + if (parport_pc_probe_port(0x278, 0x678, irq[0], dma[0], NULL)) count++; count += parport_pc_init_pci (irq[0], dma[0]); } diff --git a/include/asm-i386/pci.h b/include/asm-i386/pci.h index ef5198dfc..8cc99dda0 100644 --- a/include/asm-i386/pci.h +++ b/include/asm-i386/pci.h @@ -10,5 +10,136 @@ #define PCIBIOS_MIN_IO 0x1000 #define PCIBIOS_MIN_MEM 0x10000000 +#ifdef __KERNEL__ + +/* Dynamic DMA mapping stuff. + * i386 has everything mapped statically. + */ + +#include <linux/types.h> +#include <linux/slab.h> +#include <asm/scatterlist.h> +#include <linux/string.h> +#include <asm/io.h> + +struct pci_dev; + +/* Allocate and map kernel buffer using consistent mode DMA for a device. + * hwdev should be valid struct pci_dev pointer for PCI devices, + * NULL for PCI-like buses (ISA, EISA). + * Returns non-NULL cpu-view pointer to the buffer if successful and + * sets *dma_addrp to the pci side dma address as well, else *dma_addrp + * is undefined. + */ +extern void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, + dma_addr_t *dma_handle); + +/* Free and unmap a consistent DMA buffer. + * cpu_addr is what was returned from 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. + * + * References to the memory and mappings associated with cpu_addr/dma_addr + * past this call are illegal. + */ +extern void pci_free_consistent(struct pci_dev *hwdev, size_t size, + void *vaddr, dma_addr_t dma_handle); + +/* Map a single buffer of the indicated size for DMA in streaming mode. + * The 32-bit bus address to use is returned. + * + * Once the device is given the dma address, the device owns this memory + * until either pci_unmap_single or pci_dma_sync_single is performed. + */ +extern inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr, + size_t size) +{ + return virt_to_bus(ptr); +} + +/* Unmap a single streaming mode DMA translation. The dma_addr and size + * must match what was provided for in a previous pci_map_single call. All + * other usages are undefined. + * + * After this call, reads by the cpu to the buffer are guarenteed to see + * whatever the device wrote there. + */ +extern inline void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, + size_t size) +{ + /* Nothing to do */ +} + +/* Map a set of buffers described by scatterlist in streaming + * mode for DMA. This is the scather-gather version of the + * above pci_map_single interface. Here the scatter gather list + * elements are each tagged with the appropriate dma address + * and length. They are obtained via sg_dma_{address,length}(SG). + * + * NOTE: An implementation may be able to use a smaller number of + * DMA address/length pairs than there are SG table elements. + * (for example via virtual mapping capabilities) + * The routine returns the number of addr/length pairs actually + * used, at most nents. + * + * Device ownership issues as mentioned above for pci_map_single are + * the same here. + */ +extern inline int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, + int nents) +{ + return nents; +} + +/* Unmap a set of streaming mode DMA translations. + * Again, cpu read rules concerning calls here are the same as for + * pci_unmap_single() above. + */ +extern inline void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, + int nents) +{ + /* Nothing to do */ +} + +/* Make physical memory consistent for a single + * streaming mode DMA translation after a transfer. + * + * If you perform a pci_map_single() but wish to interrogate the + * buffer using the cpu, yet do not wish to teardown the PCI dma + * mapping, you must call this function before doing so. At the + * next point you give the PCI dma address back to the card, the + * device again owns the buffer. + */ +extern inline void pci_dma_sync_single(struct pci_dev *hwdev, + dma_addr_t dma_handle, + size_t size) +{ + /* Nothing to do */ +} + +/* Make physical memory consistent for a set of streaming + * mode DMA translations after a transfer. + * + * The same as pci_dma_sync_single but for a scatter-gather list, + * same rules and usage. + */ +extern inline void pci_dma_sync_sg(struct pci_dev *hwdev, + struct scatterlist *sg, + int nelems) +{ + /* Nothing to do */ +} + +/* These macros should be used after a pci_map_sg call has been done + * to get bus addresses of each of the SG entries and their lengths. + * You should only work with the number of sg entries pci_map_sg + * returns, or alternatively stop on the first sg_dma_len(sg) which + * is 0. + */ +#define sg_dma_address(sg) (virt_to_bus((sg)->address)) +#define sg_dma_len(sg) ((sg)->length) + +#endif /* __KERNEL__ */ + #endif /* __i386_PCI_H */ diff --git a/include/asm-i386/semaphore.h b/include/asm-i386/semaphore.h index ef4c558da..827c53192 100644 --- a/include/asm-i386/semaphore.h +++ b/include/asm-i386/semaphore.h @@ -238,11 +238,18 @@ struct rw_semaphore { #define __RWSEM_DEBUG_INIT /* */ #endif -#define __RWSEM_INITIALIZER(name) \ -{ ATOMIC_INIT(RW_LOCK_BIAS), 0, 0, 0, 0, __WAIT_QUEUE_HEAD_INITIALIZER((name).wait), \ +#define __RWSEM_INITIALIZER(name,count) \ +{ ATOMIC_INIT(count), 0, 0, 0, 0, __WAIT_QUEUE_HEAD_INITIALIZER((name).wait), \ __WAIT_QUEUE_HEAD_INITIALIZER((name).write_bias_wait) \ __SEM_DEBUG_INIT(name) __RWSEM_DEBUG_INIT } +#define __DECLARE_RWSEM_GENERIC(name,count) \ + struct rw_semaphore name = __RWSEM_INITIALIZER(name,count) + +#define DECLARE_RWSEM(name) __DECLARE_RWSEM_GENERIC(name,RW_LOCK_BIAS) +#define DECLARE_RWSEM_READ_LOCKED(name) __DECLARE_RWSEM_GENERIC(name,RW_LOCK_BIAS-1) +#define DECLARE_RWSEM_WRITE_LOCKED(name) __DECLARE_RWSEM_GENERIC(name,0) + extern inline void init_rwsem(struct rw_semaphore *sem) { atomic_set(&sem->count, RW_LOCK_BIAS); diff --git a/include/asm-i386/siginfo.h b/include/asm-i386/siginfo.h index 467aa9d39..c762775c1 100644 --- a/include/asm-i386/siginfo.h +++ b/include/asm-i386/siginfo.h @@ -24,8 +24,7 @@ typedef struct siginfo { /* kill() */ struct { pid_t _pid; /* sender's pid */ - old_uid_t _uid; /* backwards compatibility */ - uid_t _uid32; /* sender's uid */ + uid_t _uid; /* sender's uid */ } _kill; /* POSIX.1b timers */ @@ -37,19 +36,17 @@ typedef struct siginfo { /* POSIX.1b signals */ struct { pid_t _pid; /* sender's pid */ - old_uid_t _uid; /* backwards compatibility */ + uid_t _uid; /* sender's uid */ sigval_t _sigval; - uid_t _uid32; /* sender's uid */ } _rt; /* SIGCHLD */ struct { pid_t _pid; /* which child */ - old_uid_t _uid; /* backwards compatibility */ + uid_t _uid; /* sender's uid */ int _status; /* exit code */ clock_t _utime; clock_t _stime; - uid_t _uid32; /* sender's uid */ } _sigchld; /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ @@ -65,18 +62,11 @@ typedef struct siginfo { } _sifields; } siginfo_t; -#define UID16_SIGINFO_COMPAT_NEEDED - /* * How these fields are to be accessed. */ #define si_pid _sifields._kill._pid -#ifdef __KERNEL__ -#define si_uid _sifields._kill._uid32 -#define si_uid16 _sifields._kill._uid -#else #define si_uid _sifields._kill._uid -#endif /* __KERNEL__ */ #define si_status _sifields._sigchld._status #define si_utime _sifields._sigchld._utime #define si_stime _sifields._sigchld._stime @@ -159,7 +149,7 @@ typedef struct siginfo { #define CLD_TRAPPED 4 /* traced child has trapped */ #define CLD_STOPPED 5 /* child has stopped */ #define CLD_CONTINUED 6 /* stopped child has continued */ -#define NSIGCHLD +#define NSIGCHLD 6 /* * SIGPOLL si_codes diff --git a/include/asm-i386/termios.h b/include/asm-i386/termios.h index 9e55723d3..9b337736f 100644 --- a/include/asm-i386/termios.h +++ b/include/asm-i386/termios.h @@ -35,6 +35,7 @@ struct termio { #define TIOCM_RI TIOCM_RNG #define TIOCM_OUT1 0x2000 #define TIOCM_OUT2 0x4000 +#define TIOCM_LOOP 0x8000 /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ diff --git a/include/asm-i386/types.h b/include/asm-i386/types.h index d792546f9..6c8bc62c2 100644 --- a/include/asm-i386/types.h +++ b/include/asm-i386/types.h @@ -41,6 +41,10 @@ typedef unsigned long long u64; #define BITS_PER_LONG 32 +/* Dma addresses are 32-bits wide. */ + +typedef u32 dma_addr_t; + #endif /* __KERNEL__ */ #endif diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h index 22286e151..6ec03679f 100644 --- a/include/asm-i386/unistd.h +++ b/include/asm-i386/unistd.h @@ -221,6 +221,7 @@ #define __NR_setgid32 214 #define __NR_setfsuid32 215 #define __NR_setfsgid32 216 +#define __NR_pivot_root 217 /* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */ |