diff options
| author | Roland Dreier <rolandd@cisco.com> | 2005-10-28 18:50:51 -0400 |
|---|---|---|
| committer | Roland Dreier <rolandd@cisco.com> | 2005-10-28 18:50:51 -0400 |
| commit | a4da0628efd788eb199dd9df225e296035ec2539 (patch) | |
| tree | 1e611030c993e1480dc2f07f26976d2d33002b0d /include/linux | |
| parent | 70a30e16a8a9d22396a4d1e96af86e43594df584 (diff) | |
| parent | 20731945ae743034353a88c307920d1f16cf8ac8 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'include/linux')
67 files changed, 1658 insertions, 402 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index a5b74efab067..d2873b732bb1 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
| @@ -42,13 +42,18 @@ enum { | |||
| 42 | ATA_SECT_SIZE = 512, | 42 | ATA_SECT_SIZE = 512, |
| 43 | 43 | ||
| 44 | ATA_ID_WORDS = 256, | 44 | ATA_ID_WORDS = 256, |
| 45 | ATA_ID_PROD_OFS = 27, | ||
| 46 | ATA_ID_FW_REV_OFS = 23, | ||
| 47 | ATA_ID_SERNO_OFS = 10, | 45 | ATA_ID_SERNO_OFS = 10, |
| 48 | ATA_ID_MAJOR_VER = 80, | 46 | ATA_ID_FW_REV_OFS = 23, |
| 49 | ATA_ID_PIO_MODES = 64, | 47 | ATA_ID_PROD_OFS = 27, |
| 48 | ATA_ID_OLD_PIO_MODES = 51, | ||
| 49 | ATA_ID_FIELD_VALID = 53, | ||
| 50 | ATA_ID_MWDMA_MODES = 63, | 50 | ATA_ID_MWDMA_MODES = 63, |
| 51 | ATA_ID_PIO_MODES = 64, | ||
| 52 | ATA_ID_EIDE_DMA_MIN = 65, | ||
| 53 | ATA_ID_EIDE_PIO = 67, | ||
| 54 | ATA_ID_EIDE_PIO_IORDY = 68, | ||
| 51 | ATA_ID_UDMA_MODES = 88, | 55 | ATA_ID_UDMA_MODES = 88, |
| 56 | ATA_ID_MAJOR_VER = 80, | ||
| 52 | ATA_ID_PIO4 = (1 << 1), | 57 | ATA_ID_PIO4 = (1 << 1), |
| 53 | 58 | ||
| 54 | ATA_PCI_CTL_OFS = 2, | 59 | ATA_PCI_CTL_OFS = 2, |
| @@ -128,10 +133,15 @@ enum { | |||
| 128 | ATA_CMD_PIO_READ_EXT = 0x24, | 133 | ATA_CMD_PIO_READ_EXT = 0x24, |
| 129 | ATA_CMD_PIO_WRITE = 0x30, | 134 | ATA_CMD_PIO_WRITE = 0x30, |
| 130 | ATA_CMD_PIO_WRITE_EXT = 0x34, | 135 | ATA_CMD_PIO_WRITE_EXT = 0x34, |
| 136 | ATA_CMD_READ_MULTI = 0xC4, | ||
| 137 | ATA_CMD_READ_MULTI_EXT = 0x29, | ||
| 138 | ATA_CMD_WRITE_MULTI = 0xC5, | ||
| 139 | ATA_CMD_WRITE_MULTI_EXT = 0x39, | ||
| 131 | ATA_CMD_SET_FEATURES = 0xEF, | 140 | ATA_CMD_SET_FEATURES = 0xEF, |
| 132 | ATA_CMD_PACKET = 0xA0, | 141 | ATA_CMD_PACKET = 0xA0, |
| 133 | ATA_CMD_VERIFY = 0x40, | 142 | ATA_CMD_VERIFY = 0x40, |
| 134 | ATA_CMD_VERIFY_EXT = 0x42, | 143 | ATA_CMD_VERIFY_EXT = 0x42, |
| 144 | ATA_CMD_INIT_DEV_PARAMS = 0x91, | ||
| 135 | 145 | ||
| 136 | /* SETFEATURES stuff */ | 146 | /* SETFEATURES stuff */ |
| 137 | SETFEATURES_XFER = 0x03, | 147 | SETFEATURES_XFER = 0x03, |
| @@ -146,14 +156,14 @@ enum { | |||
| 146 | XFER_MW_DMA_2 = 0x22, | 156 | XFER_MW_DMA_2 = 0x22, |
| 147 | XFER_MW_DMA_1 = 0x21, | 157 | XFER_MW_DMA_1 = 0x21, |
| 148 | XFER_MW_DMA_0 = 0x20, | 158 | XFER_MW_DMA_0 = 0x20, |
| 159 | XFER_SW_DMA_2 = 0x12, | ||
| 160 | XFER_SW_DMA_1 = 0x11, | ||
| 161 | XFER_SW_DMA_0 = 0x10, | ||
| 149 | XFER_PIO_4 = 0x0C, | 162 | XFER_PIO_4 = 0x0C, |
| 150 | XFER_PIO_3 = 0x0B, | 163 | XFER_PIO_3 = 0x0B, |
| 151 | XFER_PIO_2 = 0x0A, | 164 | XFER_PIO_2 = 0x0A, |
| 152 | XFER_PIO_1 = 0x09, | 165 | XFER_PIO_1 = 0x09, |
| 153 | XFER_PIO_0 = 0x08, | 166 | XFER_PIO_0 = 0x08, |
| 154 | XFER_SW_DMA_2 = 0x12, | ||
| 155 | XFER_SW_DMA_1 = 0x11, | ||
| 156 | XFER_SW_DMA_0 = 0x10, | ||
| 157 | XFER_PIO_SLOW = 0x00, | 167 | XFER_PIO_SLOW = 0x00, |
| 158 | 168 | ||
| 159 | /* ATAPI stuff */ | 169 | /* ATAPI stuff */ |
| @@ -181,6 +191,7 @@ enum { | |||
| 181 | ATA_TFLAG_ISADDR = (1 << 1), /* enable r/w to nsect/lba regs */ | 191 | ATA_TFLAG_ISADDR = (1 << 1), /* enable r/w to nsect/lba regs */ |
| 182 | ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ | 192 | ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ |
| 183 | ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */ | 193 | ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */ |
| 194 | ATA_TFLAG_LBA = (1 << 4), /* enable LBA */ | ||
| 184 | }; | 195 | }; |
| 185 | 196 | ||
| 186 | enum ata_tf_protocols { | 197 | enum ata_tf_protocols { |
| @@ -250,7 +261,19 @@ struct ata_taskfile { | |||
| 250 | ((u64) (id)[(n) + 1] << 16) | \ | 261 | ((u64) (id)[(n) + 1] << 16) | \ |
| 251 | ((u64) (id)[(n) + 0]) ) | 262 | ((u64) (id)[(n) + 0]) ) |
| 252 | 263 | ||
| 253 | static inline int atapi_cdb_len(u16 *dev_id) | 264 | static inline int ata_id_current_chs_valid(const u16 *id) |
| 265 | { | ||
| 266 | /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command | ||
| 267 | has not been issued to the device then the values of | ||
| 268 | id[54] to id[56] are vendor specific. */ | ||
| 269 | return (id[53] & 0x01) && /* Current translation valid */ | ||
| 270 | id[54] && /* cylinders in current translation */ | ||
| 271 | id[55] && /* heads in current translation */ | ||
| 272 | id[55] <= 16 && | ||
| 273 | id[56]; /* sectors in current translation */ | ||
| 274 | } | ||
| 275 | |||
| 276 | static inline int atapi_cdb_len(const u16 *dev_id) | ||
| 254 | { | 277 | { |
| 255 | u16 tmp = dev_id[0] & 0x3; | 278 | u16 tmp = dev_id[0] & 0x3; |
| 256 | switch (tmp) { | 279 | switch (tmp) { |
| @@ -260,7 +283,7 @@ static inline int atapi_cdb_len(u16 *dev_id) | |||
| 260 | } | 283 | } |
| 261 | } | 284 | } |
| 262 | 285 | ||
| 263 | static inline int is_atapi_taskfile(struct ata_taskfile *tf) | 286 | static inline int is_atapi_taskfile(const struct ata_taskfile *tf) |
| 264 | { | 287 | { |
| 265 | return (tf->protocol == ATA_PROT_ATAPI) || | 288 | return (tf->protocol == ATA_PROT_ATAPI) || |
| 266 | (tf->protocol == ATA_PROT_ATAPI_NODATA) || | 289 | (tf->protocol == ATA_PROT_ATAPI_NODATA) || |
diff --git a/include/linux/audit.h b/include/linux/audit.h index b2a2509bd7ea..da3c01955f3d 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
| @@ -260,11 +260,11 @@ extern int audit_filter_user(struct netlink_skb_parms *cb, int type); | |||
| 260 | #ifdef CONFIG_AUDIT | 260 | #ifdef CONFIG_AUDIT |
| 261 | /* These are defined in audit.c */ | 261 | /* These are defined in audit.c */ |
| 262 | /* Public API */ | 262 | /* Public API */ |
| 263 | extern void audit_log(struct audit_context *ctx, int gfp_mask, | 263 | extern void audit_log(struct audit_context *ctx, gfp_t gfp_mask, |
| 264 | int type, const char *fmt, ...) | 264 | int type, const char *fmt, ...) |
| 265 | __attribute__((format(printf,4,5))); | 265 | __attribute__((format(printf,4,5))); |
| 266 | 266 | ||
| 267 | extern struct audit_buffer *audit_log_start(struct audit_context *ctx, int gfp_mask, int type); | 267 | extern struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type); |
| 268 | extern void audit_log_format(struct audit_buffer *ab, | 268 | extern void audit_log_format(struct audit_buffer *ab, |
| 269 | const char *fmt, ...) | 269 | const char *fmt, ...) |
| 270 | __attribute__((format(printf,2,3))); | 270 | __attribute__((format(printf,2,3))); |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 3344b4e8e43a..685fd3720df5 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -301,7 +301,7 @@ extern struct bio *bio_map_user_iov(struct request_queue *, | |||
| 301 | struct sg_iovec *, int, int); | 301 | struct sg_iovec *, int, int); |
| 302 | extern void bio_unmap_user(struct bio *); | 302 | extern void bio_unmap_user(struct bio *); |
| 303 | extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int, | 303 | extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int, |
| 304 | unsigned int); | 304 | gfp_t); |
| 305 | extern void bio_set_pages_dirty(struct bio *bio); | 305 | extern void bio_set_pages_dirty(struct bio *bio); |
| 306 | extern void bio_check_pages_dirty(struct bio *bio); | 306 | extern void bio_check_pages_dirty(struct bio *bio); |
| 307 | extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int); | 307 | extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int); |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index efdc9b5bc05c..025a7f084dbd 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -96,8 +96,8 @@ struct io_context { | |||
| 96 | 96 | ||
| 97 | void put_io_context(struct io_context *ioc); | 97 | void put_io_context(struct io_context *ioc); |
| 98 | void exit_io_context(void); | 98 | void exit_io_context(void); |
| 99 | struct io_context *current_io_context(int gfp_flags); | 99 | struct io_context *current_io_context(gfp_t gfp_flags); |
| 100 | struct io_context *get_io_context(int gfp_flags); | 100 | struct io_context *get_io_context(gfp_t gfp_flags); |
| 101 | void copy_io_context(struct io_context **pdst, struct io_context **psrc); | 101 | void copy_io_context(struct io_context **pdst, struct io_context **psrc); |
| 102 | void swap_io_context(struct io_context **ioc1, struct io_context **ioc2); | 102 | void swap_io_context(struct io_context **ioc1, struct io_context **ioc2); |
| 103 | 103 | ||
| @@ -107,9 +107,9 @@ typedef void (rq_end_io_fn)(struct request *); | |||
| 107 | struct request_list { | 107 | struct request_list { |
| 108 | int count[2]; | 108 | int count[2]; |
| 109 | int starved[2]; | 109 | int starved[2]; |
| 110 | int elvpriv; | ||
| 110 | mempool_t *rq_pool; | 111 | mempool_t *rq_pool; |
| 111 | wait_queue_head_t wait[2]; | 112 | wait_queue_head_t wait[2]; |
| 112 | wait_queue_head_t drain; | ||
| 113 | }; | 113 | }; |
| 114 | 114 | ||
| 115 | #define BLK_MAX_CDB 16 | 115 | #define BLK_MAX_CDB 16 |
| @@ -203,6 +203,7 @@ struct request { | |||
| 203 | enum rq_flag_bits { | 203 | enum rq_flag_bits { |
| 204 | __REQ_RW, /* not set, read. set, write */ | 204 | __REQ_RW, /* not set, read. set, write */ |
| 205 | __REQ_FAILFAST, /* no low level driver retries */ | 205 | __REQ_FAILFAST, /* no low level driver retries */ |
| 206 | __REQ_SORTED, /* elevator knows about this request */ | ||
| 206 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ | 207 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ |
| 207 | __REQ_HARDBARRIER, /* may not be passed by drive either */ | 208 | __REQ_HARDBARRIER, /* may not be passed by drive either */ |
| 208 | __REQ_CMD, /* is a regular fs rw request */ | 209 | __REQ_CMD, /* is a regular fs rw request */ |
| @@ -210,6 +211,7 @@ enum rq_flag_bits { | |||
| 210 | __REQ_STARTED, /* drive already may have started this one */ | 211 | __REQ_STARTED, /* drive already may have started this one */ |
| 211 | __REQ_DONTPREP, /* don't call prep for this one */ | 212 | __REQ_DONTPREP, /* don't call prep for this one */ |
| 212 | __REQ_QUEUED, /* uses queueing */ | 213 | __REQ_QUEUED, /* uses queueing */ |
| 214 | __REQ_ELVPRIV, /* elevator private data attached */ | ||
| 213 | /* | 215 | /* |
| 214 | * for ATA/ATAPI devices | 216 | * for ATA/ATAPI devices |
| 215 | */ | 217 | */ |
| @@ -235,6 +237,7 @@ enum rq_flag_bits { | |||
| 235 | 237 | ||
| 236 | #define REQ_RW (1 << __REQ_RW) | 238 | #define REQ_RW (1 << __REQ_RW) |
| 237 | #define REQ_FAILFAST (1 << __REQ_FAILFAST) | 239 | #define REQ_FAILFAST (1 << __REQ_FAILFAST) |
| 240 | #define REQ_SORTED (1 << __REQ_SORTED) | ||
| 238 | #define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) | 241 | #define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) |
| 239 | #define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER) | 242 | #define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER) |
| 240 | #define REQ_CMD (1 << __REQ_CMD) | 243 | #define REQ_CMD (1 << __REQ_CMD) |
| @@ -242,6 +245,7 @@ enum rq_flag_bits { | |||
| 242 | #define REQ_STARTED (1 << __REQ_STARTED) | 245 | #define REQ_STARTED (1 << __REQ_STARTED) |
| 243 | #define REQ_DONTPREP (1 << __REQ_DONTPREP) | 246 | #define REQ_DONTPREP (1 << __REQ_DONTPREP) |
| 244 | #define REQ_QUEUED (1 << __REQ_QUEUED) | 247 | #define REQ_QUEUED (1 << __REQ_QUEUED) |
| 248 | #define REQ_ELVPRIV (1 << __REQ_ELVPRIV) | ||
| 245 | #define REQ_PC (1 << __REQ_PC) | 249 | #define REQ_PC (1 << __REQ_PC) |
| 246 | #define REQ_BLOCK_PC (1 << __REQ_BLOCK_PC) | 250 | #define REQ_BLOCK_PC (1 << __REQ_BLOCK_PC) |
| 247 | #define REQ_SENSE (1 << __REQ_SENSE) | 251 | #define REQ_SENSE (1 << __REQ_SENSE) |
| @@ -333,6 +337,12 @@ struct request_queue | |||
| 333 | end_flush_fn *end_flush_fn; | 337 | end_flush_fn *end_flush_fn; |
| 334 | 338 | ||
| 335 | /* | 339 | /* |
| 340 | * Dispatch queue sorting | ||
| 341 | */ | ||
| 342 | sector_t end_sector; | ||
| 343 | struct request *boundary_rq; | ||
| 344 | |||
| 345 | /* | ||
| 336 | * Auto-unplugging state | 346 | * Auto-unplugging state |
| 337 | */ | 347 | */ |
| 338 | struct timer_list unplug_timer; | 348 | struct timer_list unplug_timer; |
| @@ -354,7 +364,7 @@ struct request_queue | |||
| 354 | * queue needs bounce pages for pages above this limit | 364 | * queue needs bounce pages for pages above this limit |
| 355 | */ | 365 | */ |
| 356 | unsigned long bounce_pfn; | 366 | unsigned long bounce_pfn; |
| 357 | unsigned int bounce_gfp; | 367 | gfp_t bounce_gfp; |
| 358 | 368 | ||
| 359 | /* | 369 | /* |
| 360 | * various queue flags, see QUEUE_* below | 370 | * various queue flags, see QUEUE_* below |
| @@ -405,8 +415,6 @@ struct request_queue | |||
| 405 | unsigned int sg_reserved_size; | 415 | unsigned int sg_reserved_size; |
| 406 | int node; | 416 | int node; |
| 407 | 417 | ||
| 408 | struct list_head drain_list; | ||
| 409 | |||
| 410 | /* | 418 | /* |
| 411 | * reserved for flush operations | 419 | * reserved for flush operations |
| 412 | */ | 420 | */ |
| @@ -434,7 +442,7 @@ enum { | |||
| 434 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ | 442 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ |
| 435 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ | 443 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ |
| 436 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ | 444 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ |
| 437 | #define QUEUE_FLAG_DRAIN 8 /* draining queue for sched switch */ | 445 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ |
| 438 | #define QUEUE_FLAG_FLUSH 9 /* doing barrier flush sequence */ | 446 | #define QUEUE_FLAG_FLUSH 9 /* doing barrier flush sequence */ |
| 439 | 447 | ||
| 440 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 448 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
| @@ -454,6 +462,7 @@ enum { | |||
| 454 | #define blk_pm_request(rq) \ | 462 | #define blk_pm_request(rq) \ |
| 455 | ((rq)->flags & (REQ_PM_SUSPEND | REQ_PM_RESUME)) | 463 | ((rq)->flags & (REQ_PM_SUSPEND | REQ_PM_RESUME)) |
| 456 | 464 | ||
| 465 | #define blk_sorted_rq(rq) ((rq)->flags & REQ_SORTED) | ||
| 457 | #define blk_barrier_rq(rq) ((rq)->flags & REQ_HARDBARRIER) | 466 | #define blk_barrier_rq(rq) ((rq)->flags & REQ_HARDBARRIER) |
| 458 | #define blk_barrier_preflush(rq) ((rq)->flags & REQ_BAR_PREFLUSH) | 467 | #define blk_barrier_preflush(rq) ((rq)->flags & REQ_BAR_PREFLUSH) |
| 459 | #define blk_barrier_postflush(rq) ((rq)->flags & REQ_BAR_POSTFLUSH) | 468 | #define blk_barrier_postflush(rq) ((rq)->flags & REQ_BAR_POSTFLUSH) |
| @@ -550,7 +559,7 @@ extern void generic_make_request(struct bio *bio); | |||
| 550 | extern void blk_put_request(struct request *); | 559 | extern void blk_put_request(struct request *); |
| 551 | extern void blk_end_sync_rq(struct request *rq); | 560 | extern void blk_end_sync_rq(struct request *rq); |
| 552 | extern void blk_attempt_remerge(request_queue_t *, struct request *); | 561 | extern void blk_attempt_remerge(request_queue_t *, struct request *); |
| 553 | extern struct request *blk_get_request(request_queue_t *, int, int); | 562 | extern struct request *blk_get_request(request_queue_t *, int, gfp_t); |
| 554 | extern void blk_insert_request(request_queue_t *, struct request *, int, void *); | 563 | extern void blk_insert_request(request_queue_t *, struct request *, int, void *); |
| 555 | extern void blk_requeue_request(request_queue_t *, struct request *); | 564 | extern void blk_requeue_request(request_queue_t *, struct request *); |
| 556 | extern void blk_plug_device(request_queue_t *); | 565 | extern void blk_plug_device(request_queue_t *); |
| @@ -565,7 +574,7 @@ extern void blk_run_queue(request_queue_t *); | |||
| 565 | extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *); | 574 | extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *); |
| 566 | extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned int); | 575 | extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned int); |
| 567 | extern int blk_rq_unmap_user(struct bio *, unsigned int); | 576 | extern int blk_rq_unmap_user(struct bio *, unsigned int); |
| 568 | extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, unsigned int); | 577 | extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, gfp_t); |
| 569 | extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int); | 578 | extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int); |
| 570 | extern int blk_execute_rq(request_queue_t *, struct gendisk *, | 579 | extern int blk_execute_rq(request_queue_t *, struct gendisk *, |
| 571 | struct request *, int); | 580 | struct request *, int); |
| @@ -611,12 +620,21 @@ extern void end_request(struct request *req, int uptodate); | |||
| 611 | 620 | ||
| 612 | static inline void blkdev_dequeue_request(struct request *req) | 621 | static inline void blkdev_dequeue_request(struct request *req) |
| 613 | { | 622 | { |
| 614 | BUG_ON(list_empty(&req->queuelist)); | 623 | elv_dequeue_request(req->q, req); |
| 624 | } | ||
| 615 | 625 | ||
| 616 | list_del_init(&req->queuelist); | 626 | /* |
| 627 | * This should be in elevator.h, but that requires pulling in rq and q | ||
| 628 | */ | ||
| 629 | static inline void elv_dispatch_add_tail(struct request_queue *q, | ||
| 630 | struct request *rq) | ||
| 631 | { | ||
| 632 | if (q->last_merge == rq) | ||
| 633 | q->last_merge = NULL; | ||
| 617 | 634 | ||
| 618 | if (req->rl) | 635 | q->end_sector = rq_end_sector(rq); |
| 619 | elv_remove_request(req->q, req); | 636 | q->boundary_rq = rq; |
| 637 | list_add_tail(&rq->queuelist, &q->queue_head); | ||
| 620 | } | 638 | } |
| 621 | 639 | ||
| 622 | /* | 640 | /* |
| @@ -650,12 +668,10 @@ extern void blk_dump_rq_flags(struct request *, char *); | |||
| 650 | extern void generic_unplug_device(request_queue_t *); | 668 | extern void generic_unplug_device(request_queue_t *); |
| 651 | extern void __generic_unplug_device(request_queue_t *); | 669 | extern void __generic_unplug_device(request_queue_t *); |
| 652 | extern long nr_blockdev_pages(void); | 670 | extern long nr_blockdev_pages(void); |
| 653 | extern void blk_wait_queue_drained(request_queue_t *, int); | ||
| 654 | extern void blk_finish_queue_drain(request_queue_t *); | ||
| 655 | 671 | ||
| 656 | int blk_get_queue(request_queue_t *); | 672 | int blk_get_queue(request_queue_t *); |
| 657 | request_queue_t *blk_alloc_queue(int gfp_mask); | 673 | request_queue_t *blk_alloc_queue(gfp_t); |
| 658 | request_queue_t *blk_alloc_queue_node(int,int); | 674 | request_queue_t *blk_alloc_queue_node(gfp_t, int); |
| 659 | #define blk_put_queue(q) blk_cleanup_queue((q)) | 675 | #define blk_put_queue(q) blk_cleanup_queue((q)) |
| 660 | 676 | ||
| 661 | /* | 677 | /* |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 6a1d154c0825..88af42f5e04a 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
| @@ -188,7 +188,7 @@ extern int buffer_heads_over_limit; | |||
| 188 | * Generic address_space_operations implementations for buffer_head-backed | 188 | * Generic address_space_operations implementations for buffer_head-backed |
| 189 | * address_spaces. | 189 | * address_spaces. |
| 190 | */ | 190 | */ |
| 191 | int try_to_release_page(struct page * page, int gfp_mask); | 191 | int try_to_release_page(struct page * page, gfp_t gfp_mask); |
| 192 | int block_invalidatepage(struct page *page, unsigned long offset); | 192 | int block_invalidatepage(struct page *page, unsigned long offset); |
| 193 | int block_write_full_page(struct page *page, get_block_t *get_block, | 193 | int block_write_full_page(struct page *page, get_block_t *get_block, |
| 194 | struct writeback_control *wbc); | 194 | struct writeback_control *wbc); |
diff --git a/include/linux/cyclomx.h b/include/linux/cyclomx.h index 04fa7dff079c..300d704bdb9a 100644 --- a/include/linux/cyclomx.h +++ b/include/linux/cyclomx.h | |||
| @@ -37,8 +37,6 @@ | |||
| 37 | #include <linux/cycx_x25.h> | 37 | #include <linux/cycx_x25.h> |
| 38 | #endif | 38 | #endif |
| 39 | 39 | ||
| 40 | #define is_digit(ch) (((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')?1:0) | ||
| 41 | |||
| 42 | /* Adapter Data Space. | 40 | /* Adapter Data Space. |
| 43 | * This structure is needed because we handle multiple cards, otherwise | 41 | * This structure is needed because we handle multiple cards, otherwise |
| 44 | * static data would do it. | 42 | * static data would do it. |
diff --git a/include/linux/cycx_drv.h b/include/linux/cycx_drv.h index 6621df86a748..12fe6b0bfcff 100644 --- a/include/linux/cycx_drv.h +++ b/include/linux/cycx_drv.h | |||
| @@ -60,6 +60,5 @@ extern int cycx_peek(struct cycx_hw *hw, u32 addr, void *buf, u32 len); | |||
| 60 | extern int cycx_poke(struct cycx_hw *hw, u32 addr, void *buf, u32 len); | 60 | extern int cycx_poke(struct cycx_hw *hw, u32 addr, void *buf, u32 len); |
| 61 | extern int cycx_exec(void __iomem *addr); | 61 | extern int cycx_exec(void __iomem *addr); |
| 62 | 62 | ||
| 63 | extern void cycx_inten(struct cycx_hw *hw); | ||
| 64 | extern void cycx_intr(struct cycx_hw *hw); | 63 | extern void cycx_intr(struct cycx_hw *hw); |
| 65 | #endif /* _CYCX_DRV_H */ | 64 | #endif /* _CYCX_DRV_H */ |
diff --git a/include/linux/device.h b/include/linux/device.h index 95d607a48f06..a9e72ac3fb9f 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -28,19 +28,6 @@ | |||
| 28 | #define BUS_ID_SIZE KOBJ_NAME_LEN | 28 | #define BUS_ID_SIZE KOBJ_NAME_LEN |
| 29 | 29 | ||
| 30 | 30 | ||
| 31 | enum { | ||
| 32 | SUSPEND_NOTIFY, | ||
| 33 | SUSPEND_SAVE_STATE, | ||
| 34 | SUSPEND_DISABLE, | ||
| 35 | SUSPEND_POWER_DOWN, | ||
| 36 | }; | ||
| 37 | |||
| 38 | enum { | ||
| 39 | RESUME_POWER_ON, | ||
| 40 | RESUME_RESTORE_STATE, | ||
| 41 | RESUME_ENABLE, | ||
| 42 | }; | ||
| 43 | |||
| 44 | struct device; | 31 | struct device; |
| 45 | struct device_driver; | 32 | struct device_driver; |
| 46 | struct class; | 33 | struct class; |
| @@ -115,8 +102,8 @@ struct device_driver { | |||
| 115 | int (*probe) (struct device * dev); | 102 | int (*probe) (struct device * dev); |
| 116 | int (*remove) (struct device * dev); | 103 | int (*remove) (struct device * dev); |
| 117 | void (*shutdown) (struct device * dev); | 104 | void (*shutdown) (struct device * dev); |
| 118 | int (*suspend) (struct device * dev, pm_message_t state, u32 level); | 105 | int (*suspend) (struct device * dev, pm_message_t state); |
| 119 | int (*resume) (struct device * dev, u32 level); | 106 | int (*resume) (struct device * dev); |
| 120 | }; | 107 | }; |
| 121 | 108 | ||
| 122 | 109 | ||
| @@ -190,7 +177,43 @@ struct class_attribute class_attr_##_name = __ATTR(_name,_mode,_show,_store) | |||
| 190 | extern int class_create_file(struct class *, const struct class_attribute *); | 177 | extern int class_create_file(struct class *, const struct class_attribute *); |
| 191 | extern void class_remove_file(struct class *, const struct class_attribute *); | 178 | extern void class_remove_file(struct class *, const struct class_attribute *); |
| 192 | 179 | ||
| 180 | struct class_device_attribute { | ||
| 181 | struct attribute attr; | ||
| 182 | ssize_t (*show)(struct class_device *, char * buf); | ||
| 183 | ssize_t (*store)(struct class_device *, const char * buf, size_t count); | ||
| 184 | }; | ||
| 185 | |||
| 186 | #define CLASS_DEVICE_ATTR(_name,_mode,_show,_store) \ | ||
| 187 | struct class_device_attribute class_device_attr_##_name = \ | ||
| 188 | __ATTR(_name,_mode,_show,_store) | ||
| 189 | |||
| 190 | extern int class_device_create_file(struct class_device *, | ||
| 191 | const struct class_device_attribute *); | ||
| 193 | 192 | ||
| 193 | /** | ||
| 194 | * struct class_device - class devices | ||
| 195 | * @class: pointer to the parent class for this class device. This is required. | ||
| 196 | * @devt: for internal use by the driver core only. | ||
| 197 | * @node: for internal use by the driver core only. | ||
| 198 | * @kobj: for internal use by the driver core only. | ||
| 199 | * @devt_attr: for internal use by the driver core only. | ||
| 200 | * @dev: if set, a symlink to the struct device is created in the sysfs | ||
| 201 | * directory for this struct class device. | ||
| 202 | * @class_data: pointer to whatever you want to store here for this struct | ||
| 203 | * class_device. Use class_get_devdata() and class_set_devdata() to get and | ||
| 204 | * set this pointer. | ||
| 205 | * @parent: pointer to a struct class_device that is the parent of this struct | ||
| 206 | * class_device. If NULL, this class_device will show up at the root of the | ||
| 207 | * struct class in sysfs (which is probably what you want to have happen.) | ||
| 208 | * @release: pointer to a release function for this struct class_device. If | ||
| 209 | * set, this will be called instead of the class specific release function. | ||
| 210 | * Only use this if you want to override the default release function, like | ||
| 211 | * when you are nesting class_device structures. | ||
| 212 | * @hotplug: pointer to a hotplug function for this struct class_device. If | ||
| 213 | * set, this will be called instead of the class specific hotplug function. | ||
| 214 | * Only use this if you want to override the default hotplug function, like | ||
| 215 | * when you are nesting class_device structures. | ||
| 216 | */ | ||
| 194 | struct class_device { | 217 | struct class_device { |
| 195 | struct list_head node; | 218 | struct list_head node; |
| 196 | 219 | ||
| @@ -198,9 +221,14 @@ struct class_device { | |||
| 198 | struct class * class; /* required */ | 221 | struct class * class; /* required */ |
| 199 | dev_t devt; /* dev_t, creates the sysfs "dev" */ | 222 | dev_t devt; /* dev_t, creates the sysfs "dev" */ |
| 200 | struct class_device_attribute *devt_attr; | 223 | struct class_device_attribute *devt_attr; |
| 224 | struct class_device_attribute uevent_attr; | ||
| 201 | struct device * dev; /* not necessary, but nice to have */ | 225 | struct device * dev; /* not necessary, but nice to have */ |
| 202 | void * class_data; /* class-specific data */ | 226 | void * class_data; /* class-specific data */ |
| 227 | struct class_device *parent; /* parent of this child device, if there is one */ | ||
| 203 | 228 | ||
| 229 | void (*release)(struct class_device *dev); | ||
| 230 | int (*hotplug)(struct class_device *dev, char **envp, | ||
| 231 | int num_envp, char *buffer, int buffer_size); | ||
| 204 | char class_id[BUS_ID_SIZE]; /* unique to this class */ | 232 | char class_id[BUS_ID_SIZE]; /* unique to this class */ |
| 205 | }; | 233 | }; |
| 206 | 234 | ||
| @@ -228,18 +256,6 @@ extern int class_device_rename(struct class_device *, char *); | |||
| 228 | extern struct class_device * class_device_get(struct class_device *); | 256 | extern struct class_device * class_device_get(struct class_device *); |
| 229 | extern void class_device_put(struct class_device *); | 257 | extern void class_device_put(struct class_device *); |
| 230 | 258 | ||
| 231 | struct class_device_attribute { | ||
| 232 | struct attribute attr; | ||
| 233 | ssize_t (*show)(struct class_device *, char * buf); | ||
| 234 | ssize_t (*store)(struct class_device *, const char * buf, size_t count); | ||
| 235 | }; | ||
| 236 | |||
| 237 | #define CLASS_DEVICE_ATTR(_name,_mode,_show,_store) \ | ||
| 238 | struct class_device_attribute class_device_attr_##_name = \ | ||
| 239 | __ATTR(_name,_mode,_show,_store) | ||
| 240 | |||
| 241 | extern int class_device_create_file(struct class_device *, | ||
| 242 | const struct class_device_attribute *); | ||
| 243 | extern void class_device_remove_file(struct class_device *, | 259 | extern void class_device_remove_file(struct class_device *, |
| 244 | const struct class_device_attribute *); | 260 | const struct class_device_attribute *); |
| 245 | extern int class_device_create_bin_file(struct class_device *, | 261 | extern int class_device_create_bin_file(struct class_device *, |
| @@ -251,8 +267,8 @@ struct class_interface { | |||
| 251 | struct list_head node; | 267 | struct list_head node; |
| 252 | struct class *class; | 268 | struct class *class; |
| 253 | 269 | ||
| 254 | int (*add) (struct class_device *); | 270 | int (*add) (struct class_device *, struct class_interface *); |
| 255 | void (*remove) (struct class_device *); | 271 | void (*remove) (struct class_device *, struct class_interface *); |
| 256 | }; | 272 | }; |
| 257 | 273 | ||
| 258 | extern int class_interface_register(struct class_interface *); | 274 | extern int class_interface_register(struct class_interface *); |
| @@ -260,12 +276,29 @@ extern void class_interface_unregister(struct class_interface *); | |||
| 260 | 276 | ||
| 261 | extern struct class *class_create(struct module *owner, char *name); | 277 | extern struct class *class_create(struct module *owner, char *name); |
| 262 | extern void class_destroy(struct class *cls); | 278 | extern void class_destroy(struct class *cls); |
| 263 | extern struct class_device *class_device_create(struct class *cls, dev_t devt, | 279 | extern struct class_device *class_device_create(struct class *cls, |
| 264 | struct device *device, char *fmt, ...) | 280 | struct class_device *parent, |
| 265 | __attribute__((format(printf,4,5))); | 281 | dev_t devt, |
| 282 | struct device *device, | ||
| 283 | char *fmt, ...) | ||
| 284 | __attribute__((format(printf,5,6))); | ||
| 266 | extern void class_device_destroy(struct class *cls, dev_t devt); | 285 | extern void class_device_destroy(struct class *cls, dev_t devt); |
| 267 | 286 | ||
| 268 | 287 | ||
| 288 | /* interface for exporting device attributes */ | ||
| 289 | struct device_attribute { | ||
| 290 | struct attribute attr; | ||
| 291 | ssize_t (*show)(struct device *dev, struct device_attribute *attr, | ||
| 292 | char *buf); | ||
| 293 | ssize_t (*store)(struct device *dev, struct device_attribute *attr, | ||
| 294 | const char *buf, size_t count); | ||
| 295 | }; | ||
| 296 | |||
| 297 | #define DEVICE_ATTR(_name,_mode,_show,_store) \ | ||
| 298 | struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store) | ||
| 299 | |||
| 300 | extern int device_create_file(struct device *device, struct device_attribute * entry); | ||
| 301 | extern void device_remove_file(struct device * dev, struct device_attribute * attr); | ||
| 269 | struct device { | 302 | struct device { |
| 270 | struct klist klist_children; | 303 | struct klist klist_children; |
| 271 | struct klist_node knode_parent; /* node in sibling list */ | 304 | struct klist_node knode_parent; /* node in sibling list */ |
| @@ -275,6 +308,7 @@ struct device { | |||
| 275 | 308 | ||
| 276 | struct kobject kobj; | 309 | struct kobject kobj; |
| 277 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ | 310 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ |
| 311 | struct device_attribute uevent_attr; | ||
| 278 | 312 | ||
| 279 | struct semaphore sem; /* semaphore to synchronize calls to | 313 | struct semaphore sem; /* semaphore to synchronize calls to |
| 280 | * its driver. | 314 | * its driver. |
| @@ -343,23 +377,6 @@ extern int device_attach(struct device * dev); | |||
| 343 | extern void driver_attach(struct device_driver * drv); | 377 | extern void driver_attach(struct device_driver * drv); |
| 344 | 378 | ||
| 345 | 379 | ||
| 346 | /* driverfs interface for exporting device attributes */ | ||
| 347 | |||
| 348 | struct device_attribute { | ||
| 349 | struct attribute attr; | ||
| 350 | ssize_t (*show)(struct device *dev, struct device_attribute *attr, | ||
| 351 | char *buf); | ||
| 352 | ssize_t (*store)(struct device *dev, struct device_attribute *attr, | ||
| 353 | const char *buf, size_t count); | ||
| 354 | }; | ||
| 355 | |||
| 356 | #define DEVICE_ATTR(_name,_mode,_show,_store) \ | ||
| 357 | struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store) | ||
| 358 | |||
| 359 | |||
| 360 | extern int device_create_file(struct device *device, struct device_attribute * entry); | ||
| 361 | extern void device_remove_file(struct device * dev, struct device_attribute * attr); | ||
| 362 | |||
| 363 | /* | 380 | /* |
| 364 | * Platform "fixup" functions - allow the platform to have their say | 381 | * Platform "fixup" functions - allow the platform to have their say |
| 365 | * about devices and actions that the general device layer doesn't | 382 | * about devices and actions that the general device layer doesn't |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index ea6bbc2d7407..a74c27e460ba 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -8,18 +8,17 @@ typedef void (elevator_merge_req_fn) (request_queue_t *, struct request *, struc | |||
| 8 | 8 | ||
| 9 | typedef void (elevator_merged_fn) (request_queue_t *, struct request *); | 9 | typedef void (elevator_merged_fn) (request_queue_t *, struct request *); |
| 10 | 10 | ||
| 11 | typedef struct request *(elevator_next_req_fn) (request_queue_t *); | 11 | typedef int (elevator_dispatch_fn) (request_queue_t *, int); |
| 12 | 12 | ||
| 13 | typedef void (elevator_add_req_fn) (request_queue_t *, struct request *, int); | 13 | typedef void (elevator_add_req_fn) (request_queue_t *, struct request *); |
| 14 | typedef int (elevator_queue_empty_fn) (request_queue_t *); | 14 | typedef int (elevator_queue_empty_fn) (request_queue_t *); |
| 15 | typedef void (elevator_remove_req_fn) (request_queue_t *, struct request *); | ||
| 16 | typedef void (elevator_requeue_req_fn) (request_queue_t *, struct request *); | ||
| 17 | typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *); | 15 | typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *); |
| 18 | typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *); | 16 | typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *); |
| 19 | typedef int (elevator_may_queue_fn) (request_queue_t *, int, struct bio *); | 17 | typedef int (elevator_may_queue_fn) (request_queue_t *, int, struct bio *); |
| 20 | 18 | ||
| 21 | typedef int (elevator_set_req_fn) (request_queue_t *, struct request *, struct bio *, int); | 19 | typedef int (elevator_set_req_fn) (request_queue_t *, struct request *, struct bio *, gfp_t); |
| 22 | typedef void (elevator_put_req_fn) (request_queue_t *, struct request *); | 20 | typedef void (elevator_put_req_fn) (request_queue_t *, struct request *); |
| 21 | typedef void (elevator_activate_req_fn) (request_queue_t *, struct request *); | ||
| 23 | typedef void (elevator_deactivate_req_fn) (request_queue_t *, struct request *); | 22 | typedef void (elevator_deactivate_req_fn) (request_queue_t *, struct request *); |
| 24 | 23 | ||
| 25 | typedef int (elevator_init_fn) (request_queue_t *, elevator_t *); | 24 | typedef int (elevator_init_fn) (request_queue_t *, elevator_t *); |
| @@ -31,10 +30,9 @@ struct elevator_ops | |||
| 31 | elevator_merged_fn *elevator_merged_fn; | 30 | elevator_merged_fn *elevator_merged_fn; |
| 32 | elevator_merge_req_fn *elevator_merge_req_fn; | 31 | elevator_merge_req_fn *elevator_merge_req_fn; |
| 33 | 32 | ||
| 34 | elevator_next_req_fn *elevator_next_req_fn; | 33 | elevator_dispatch_fn *elevator_dispatch_fn; |
| 35 | elevator_add_req_fn *elevator_add_req_fn; | 34 | elevator_add_req_fn *elevator_add_req_fn; |
| 36 | elevator_remove_req_fn *elevator_remove_req_fn; | 35 | elevator_activate_req_fn *elevator_activate_req_fn; |
| 37 | elevator_requeue_req_fn *elevator_requeue_req_fn; | ||
| 38 | elevator_deactivate_req_fn *elevator_deactivate_req_fn; | 36 | elevator_deactivate_req_fn *elevator_deactivate_req_fn; |
| 39 | 37 | ||
| 40 | elevator_queue_empty_fn *elevator_queue_empty_fn; | 38 | elevator_queue_empty_fn *elevator_queue_empty_fn; |
| @@ -81,15 +79,15 @@ struct elevator_queue | |||
| 81 | /* | 79 | /* |
| 82 | * block elevator interface | 80 | * block elevator interface |
| 83 | */ | 81 | */ |
| 82 | extern void elv_dispatch_sort(request_queue_t *, struct request *); | ||
| 84 | extern void elv_add_request(request_queue_t *, struct request *, int, int); | 83 | extern void elv_add_request(request_queue_t *, struct request *, int, int); |
| 85 | extern void __elv_add_request(request_queue_t *, struct request *, int, int); | 84 | extern void __elv_add_request(request_queue_t *, struct request *, int, int); |
| 86 | extern int elv_merge(request_queue_t *, struct request **, struct bio *); | 85 | extern int elv_merge(request_queue_t *, struct request **, struct bio *); |
| 87 | extern void elv_merge_requests(request_queue_t *, struct request *, | 86 | extern void elv_merge_requests(request_queue_t *, struct request *, |
| 88 | struct request *); | 87 | struct request *); |
| 89 | extern void elv_merged_request(request_queue_t *, struct request *); | 88 | extern void elv_merged_request(request_queue_t *, struct request *); |
| 90 | extern void elv_remove_request(request_queue_t *, struct request *); | 89 | extern void elv_dequeue_request(request_queue_t *, struct request *); |
| 91 | extern void elv_requeue_request(request_queue_t *, struct request *); | 90 | extern void elv_requeue_request(request_queue_t *, struct request *); |
| 92 | extern void elv_deactivate_request(request_queue_t *, struct request *); | ||
| 93 | extern int elv_queue_empty(request_queue_t *); | 91 | extern int elv_queue_empty(request_queue_t *); |
| 94 | extern struct request *elv_next_request(struct request_queue *q); | 92 | extern struct request *elv_next_request(struct request_queue *q); |
| 95 | extern struct request *elv_former_request(request_queue_t *, struct request *); | 93 | extern struct request *elv_former_request(request_queue_t *, struct request *); |
| @@ -98,7 +96,7 @@ extern int elv_register_queue(request_queue_t *q); | |||
| 98 | extern void elv_unregister_queue(request_queue_t *q); | 96 | extern void elv_unregister_queue(request_queue_t *q); |
| 99 | extern int elv_may_queue(request_queue_t *, int, struct bio *); | 97 | extern int elv_may_queue(request_queue_t *, int, struct bio *); |
| 100 | extern void elv_completed_request(request_queue_t *, struct request *); | 98 | extern void elv_completed_request(request_queue_t *, struct request *); |
| 101 | extern int elv_set_request(request_queue_t *, struct request *, struct bio *, int); | 99 | extern int elv_set_request(request_queue_t *, struct request *, struct bio *, gfp_t); |
| 102 | extern void elv_put_request(request_queue_t *, struct request *); | 100 | extern void elv_put_request(request_queue_t *, struct request *); |
| 103 | 101 | ||
| 104 | /* | 102 | /* |
| @@ -142,4 +140,6 @@ enum { | |||
| 142 | ELV_MQUEUE_MUST, | 140 | ELV_MQUEUE_MUST, |
| 143 | }; | 141 | }; |
| 144 | 142 | ||
| 143 | #define rq_end_sector(rq) ((rq)->sector + (rq)->nr_sectors) | ||
| 144 | |||
| 145 | #endif | 145 | #endif |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index ed1440ea4c91..d2c390eff1b2 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
| @@ -269,6 +269,8 @@ u32 ethtool_op_get_tso(struct net_device *dev); | |||
| 269 | int ethtool_op_set_tso(struct net_device *dev, u32 data); | 269 | int ethtool_op_set_tso(struct net_device *dev, u32 data); |
| 270 | int ethtool_op_get_perm_addr(struct net_device *dev, | 270 | int ethtool_op_get_perm_addr(struct net_device *dev, |
| 271 | struct ethtool_perm_addr *addr, u8 *data); | 271 | struct ethtool_perm_addr *addr, u8 *data); |
| 272 | u32 ethtool_op_get_ufo(struct net_device *dev); | ||
| 273 | int ethtool_op_set_ufo(struct net_device *dev, u32 data); | ||
| 272 | 274 | ||
| 273 | /** | 275 | /** |
| 274 | * ðtool_ops - Alter and report network device settings | 276 | * ðtool_ops - Alter and report network device settings |
| @@ -298,6 +300,8 @@ int ethtool_op_get_perm_addr(struct net_device *dev, | |||
| 298 | * set_sg: Turn scatter-gather on or off | 300 | * set_sg: Turn scatter-gather on or off |
| 299 | * get_tso: Report whether TCP segmentation offload is enabled | 301 | * get_tso: Report whether TCP segmentation offload is enabled |
| 300 | * set_tso: Turn TCP segmentation offload on or off | 302 | * set_tso: Turn TCP segmentation offload on or off |
| 303 | * get_ufo: Report whether UDP fragmentation offload is enabled | ||
| 304 | * set_ufo: Turn UDP fragmentation offload on or off | ||
| 301 | * self_test: Run specified self-tests | 305 | * self_test: Run specified self-tests |
| 302 | * get_strings: Return a set of strings that describe the requested objects | 306 | * get_strings: Return a set of strings that describe the requested objects |
| 303 | * phys_id: Identify the device | 307 | * phys_id: Identify the device |
| @@ -364,6 +368,8 @@ struct ethtool_ops { | |||
| 364 | int (*get_perm_addr)(struct net_device *, struct ethtool_perm_addr *, u8 *); | 368 | int (*get_perm_addr)(struct net_device *, struct ethtool_perm_addr *, u8 *); |
| 365 | int (*begin)(struct net_device *); | 369 | int (*begin)(struct net_device *); |
| 366 | void (*complete)(struct net_device *); | 370 | void (*complete)(struct net_device *); |
| 371 | u32 (*get_ufo)(struct net_device *); | ||
| 372 | int (*set_ufo)(struct net_device *, u32); | ||
| 367 | }; | 373 | }; |
| 368 | 374 | ||
| 369 | /* CMDs currently supported */ | 375 | /* CMDs currently supported */ |
| @@ -400,6 +406,8 @@ struct ethtool_ops { | |||
| 400 | #define ETHTOOL_GTSO 0x0000001e /* Get TSO enable (ethtool_value) */ | 406 | #define ETHTOOL_GTSO 0x0000001e /* Get TSO enable (ethtool_value) */ |
| 401 | #define ETHTOOL_STSO 0x0000001f /* Set TSO enable (ethtool_value) */ | 407 | #define ETHTOOL_STSO 0x0000001f /* Set TSO enable (ethtool_value) */ |
| 402 | #define ETHTOOL_GPERMADDR 0x00000020 /* Get permanent hardware address */ | 408 | #define ETHTOOL_GPERMADDR 0x00000020 /* Get permanent hardware address */ |
| 409 | #define ETHTOOL_GUFO 0x00000021 /* Get UFO enable (ethtool_value) */ | ||
| 410 | #define ETHTOOL_SUFO 0x00000022 /* Set UFO enable (ethtool_value) */ | ||
| 403 | 411 | ||
| 404 | /* compatibility with older code */ | 412 | /* compatibility with older code */ |
| 405 | #define SPARC_ETH_GSET ETHTOOL_GSET | 413 | #define SPARC_ETH_GSET ETHTOOL_GSET |
diff --git a/include/linux/fs.h b/include/linux/fs.h index e0b77c5af9a0..f83d997c5582 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -320,7 +320,7 @@ struct address_space_operations { | |||
| 320 | /* Unfortunately this kludge is needed for FIBMAP. Don't use it */ | 320 | /* Unfortunately this kludge is needed for FIBMAP. Don't use it */ |
| 321 | sector_t (*bmap)(struct address_space *, sector_t); | 321 | sector_t (*bmap)(struct address_space *, sector_t); |
| 322 | int (*invalidatepage) (struct page *, unsigned long); | 322 | int (*invalidatepage) (struct page *, unsigned long); |
| 323 | int (*releasepage) (struct page *, int); | 323 | int (*releasepage) (struct page *, gfp_t); |
| 324 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, | 324 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, |
| 325 | loff_t offset, unsigned long nr_segs); | 325 | loff_t offset, unsigned long nr_segs); |
| 326 | struct page* (*get_xip_page)(struct address_space *, sector_t, | 326 | struct page* (*get_xip_page)(struct address_space *, sector_t, |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 01796c41c951..eabdb5cce357 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -119,7 +119,7 @@ struct gendisk { | |||
| 119 | int policy; | 119 | int policy; |
| 120 | 120 | ||
| 121 | atomic_t sync_io; /* RAID */ | 121 | atomic_t sync_io; /* RAID */ |
| 122 | unsigned long stamp, stamp_idle; | 122 | unsigned long stamp; |
| 123 | int in_flight; | 123 | int in_flight; |
| 124 | #ifdef CONFIG_SMP | 124 | #ifdef CONFIG_SMP |
| 125 | struct disk_stats *dkstats; | 125 | struct disk_stats *dkstats; |
| @@ -132,6 +132,7 @@ struct gendisk { | |||
| 132 | struct disk_attribute { | 132 | struct disk_attribute { |
| 133 | struct attribute attr; | 133 | struct attribute attr; |
| 134 | ssize_t (*show)(struct gendisk *, char *); | 134 | ssize_t (*show)(struct gendisk *, char *); |
| 135 | ssize_t (*store)(struct gendisk *, const char *, size_t); | ||
| 135 | }; | 136 | }; |
| 136 | 137 | ||
| 137 | /* | 138 | /* |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 3010e172394d..c3779432a723 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -12,8 +12,8 @@ struct vm_area_struct; | |||
| 12 | * GFP bitmasks.. | 12 | * GFP bitmasks.. |
| 13 | */ | 13 | */ |
| 14 | /* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */ | 14 | /* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */ |
| 15 | #define __GFP_DMA 0x01u | 15 | #define __GFP_DMA ((__force gfp_t)0x01u) |
| 16 | #define __GFP_HIGHMEM 0x02u | 16 | #define __GFP_HIGHMEM ((__force gfp_t)0x02u) |
| 17 | 17 | ||
| 18 | /* | 18 | /* |
| 19 | * Action modifiers - doesn't change the zoning | 19 | * Action modifiers - doesn't change the zoning |
| @@ -26,24 +26,24 @@ struct vm_area_struct; | |||
| 26 | * | 26 | * |
| 27 | * __GFP_NORETRY: The VM implementation must not retry indefinitely. | 27 | * __GFP_NORETRY: The VM implementation must not retry indefinitely. |
| 28 | */ | 28 | */ |
| 29 | #define __GFP_WAIT 0x10u /* Can wait and reschedule? */ | 29 | #define __GFP_WAIT ((__force gfp_t)0x10u) /* Can wait and reschedule? */ |
| 30 | #define __GFP_HIGH 0x20u /* Should access emergency pools? */ | 30 | #define __GFP_HIGH ((__force gfp_t)0x20u) /* Should access emergency pools? */ |
| 31 | #define __GFP_IO 0x40u /* Can start physical IO? */ | 31 | #define __GFP_IO ((__force gfp_t)0x40u) /* Can start physical IO? */ |
| 32 | #define __GFP_FS 0x80u /* Can call down to low-level FS? */ | 32 | #define __GFP_FS ((__force gfp_t)0x80u) /* Can call down to low-level FS? */ |
| 33 | #define __GFP_COLD 0x100u /* Cache-cold page required */ | 33 | #define __GFP_COLD ((__force gfp_t)0x100u) /* Cache-cold page required */ |
| 34 | #define __GFP_NOWARN 0x200u /* Suppress page allocation failure warning */ | 34 | #define __GFP_NOWARN ((__force gfp_t)0x200u) /* Suppress page allocation failure warning */ |
| 35 | #define __GFP_REPEAT 0x400u /* Retry the allocation. Might fail */ | 35 | #define __GFP_REPEAT ((__force gfp_t)0x400u) /* Retry the allocation. Might fail */ |
| 36 | #define __GFP_NOFAIL 0x800u /* Retry for ever. Cannot fail */ | 36 | #define __GFP_NOFAIL ((__force gfp_t)0x800u) /* Retry for ever. Cannot fail */ |
| 37 | #define __GFP_NORETRY 0x1000u /* Do not retry. Might fail */ | 37 | #define __GFP_NORETRY ((__force gfp_t)0x1000u)/* Do not retry. Might fail */ |
| 38 | #define __GFP_NO_GROW 0x2000u /* Slab internal usage */ | 38 | #define __GFP_NO_GROW ((__force gfp_t)0x2000u)/* Slab internal usage */ |
| 39 | #define __GFP_COMP 0x4000u /* Add compound page metadata */ | 39 | #define __GFP_COMP ((__force gfp_t)0x4000u)/* Add compound page metadata */ |
| 40 | #define __GFP_ZERO 0x8000u /* Return zeroed page on success */ | 40 | #define __GFP_ZERO ((__force gfp_t)0x8000u)/* Return zeroed page on success */ |
| 41 | #define __GFP_NOMEMALLOC 0x10000u /* Don't use emergency reserves */ | 41 | #define __GFP_NOMEMALLOC ((__force gfp_t)0x10000u) /* Don't use emergency reserves */ |
| 42 | #define __GFP_NORECLAIM 0x20000u /* No realy zone reclaim during allocation */ | 42 | #define __GFP_NORECLAIM ((__force gfp_t)0x20000u) /* No realy zone reclaim during allocation */ |
| 43 | #define __GFP_HARDWALL 0x40000u /* Enforce hardwall cpuset memory allocs */ | 43 | #define __GFP_HARDWALL ((__force gfp_t)0x40000u) /* Enforce hardwall cpuset memory allocs */ |
| 44 | 44 | ||
| 45 | #define __GFP_BITS_SHIFT 20 /* Room for 20 __GFP_FOO bits */ | 45 | #define __GFP_BITS_SHIFT 20 /* Room for 20 __GFP_FOO bits */ |
| 46 | #define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1) | 46 | #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) |
| 47 | 47 | ||
| 48 | /* if you forget to add the bitmask here kernel will crash, period */ | 48 | /* if you forget to add the bitmask here kernel will crash, period */ |
| 49 | #define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \ | 49 | #define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \ |
| @@ -64,6 +64,7 @@ struct vm_area_struct; | |||
| 64 | 64 | ||
| 65 | #define GFP_DMA __GFP_DMA | 65 | #define GFP_DMA __GFP_DMA |
| 66 | 66 | ||
| 67 | #define gfp_zone(mask) ((__force int)((mask) & (__force gfp_t)GFP_ZONEMASK)) | ||
| 67 | 68 | ||
| 68 | /* | 69 | /* |
| 69 | * There is only one page-allocator function, and two main namespaces to | 70 | * There is only one page-allocator function, and two main namespaces to |
| @@ -94,7 +95,7 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask, | |||
| 94 | return NULL; | 95 | return NULL; |
| 95 | 96 | ||
| 96 | return __alloc_pages(gfp_mask, order, | 97 | return __alloc_pages(gfp_mask, order, |
| 97 | NODE_DATA(nid)->node_zonelists + (gfp_mask & GFP_ZONEMASK)); | 98 | NODE_DATA(nid)->node_zonelists + gfp_zone(gfp_mask)); |
| 98 | } | 99 | } |
| 99 | 100 | ||
| 100 | #ifdef CONFIG_NUMA | 101 | #ifdef CONFIG_NUMA |
diff --git a/include/linux/hil.h b/include/linux/hil.h new file mode 100644 index 000000000000..13352d7d0caf --- /dev/null +++ b/include/linux/hil.h | |||
| @@ -0,0 +1,483 @@ | |||
| 1 | #ifndef _HIL_H_ | ||
| 2 | #define _HIL_H_ | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Hewlett Packard Human Interface Loop (HP-HIL) Protocol -- header. | ||
| 6 | * | ||
| 7 | * Copyright (c) 2001 Brian S. Julin | ||
| 8 | * All rights reserved. | ||
| 9 | * | ||
| 10 | * Redistribution and use in source and binary forms, with or without | ||
| 11 | * modification, are permitted provided that the following conditions | ||
| 12 | * are met: | ||
| 13 | * 1. Redistributions of source code must retain the above copyright | ||
| 14 | * notice, this list of conditions, and the following disclaimer, | ||
| 15 | * without modification. | ||
| 16 | * 2. The name of the author may not be used to endorse or promote products | ||
| 17 | * derived from this software without specific prior written permission. | ||
| 18 | * | ||
| 19 | * Alternatively, this software may be distributed under the terms of the | ||
| 20 | * GNU General Public License ("GPL"). | ||
| 21 | * | ||
| 22 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
| 23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| 25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR | ||
| 26 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| 27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| 28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| 30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| 31 | * | ||
| 32 | * References: | ||
| 33 | * HP-HIL Technical Reference Manual. Hewlett Packard Product No. 45918A | ||
| 34 | * | ||
| 35 | * A note of thanks to HP for providing and shipping reference materials | ||
| 36 | * free of charge to help in the development of HIL support for Linux. | ||
| 37 | * | ||
| 38 | */ | ||
| 39 | |||
| 40 | #include <asm/types.h> | ||
| 41 | |||
| 42 | /* Physical constants relevant to raw loop/device timing. | ||
| 43 | */ | ||
| 44 | |||
| 45 | #define HIL_CLOCK 8MHZ | ||
| 46 | #define HIL_EK1_CLOCK 30HZ | ||
| 47 | #define HIL_EK2_CLOCK 60HZ | ||
| 48 | |||
| 49 | #define HIL_TIMEOUT_DEV 5 /* ms */ | ||
| 50 | #define HIL_TIMEOUT_DEVS 10 /* ms */ | ||
| 51 | #define HIL_TIMEOUT_NORESP 10 /* ms */ | ||
| 52 | #define HIL_TIMEOUT_DEVS_DATA 16 /* ms */ | ||
| 53 | #define HIL_TIMEOUT_SELFTEST 200 /* ms */ | ||
| 54 | |||
| 55 | |||
| 56 | /* Actual wire line coding. These will only be useful if someone is | ||
| 57 | * implementing a software MLC to run HIL devices on a non-parisc machine. | ||
| 58 | */ | ||
| 59 | |||
| 60 | #define HIL_WIRE_PACKET_LEN 15 | ||
| 61 | enum hil_wire_bitpos { | ||
| 62 | HIL_WIRE_START = 0, | ||
| 63 | HIL_WIRE_ADDR2, | ||
| 64 | HIL_WIRE_ADDR1, | ||
| 65 | HIL_WIRE_ADDR0, | ||
| 66 | HIL_WIRE_COMMAND, | ||
| 67 | HIL_WIRE_DATA7, | ||
| 68 | HIL_WIRE_DATA6, | ||
| 69 | HIL_WIRE_DATA5, | ||
| 70 | HIL_WIRE_DATA4, | ||
| 71 | HIL_WIRE_DATA3, | ||
| 72 | HIL_WIRE_DATA2, | ||
| 73 | HIL_WIRE_DATA1, | ||
| 74 | HIL_WIRE_DATA0, | ||
| 75 | HIL_WIRE_PARITY, | ||
| 76 | HIL_WIRE_STOP | ||
| 77 | }; | ||
| 78 | |||
| 79 | /* HP documentation uses these bit positions to refer to commands; | ||
| 80 | * we will call these "packets". | ||
| 81 | */ | ||
| 82 | enum hil_pkt_bitpos { | ||
| 83 | HIL_PKT_CMD = 0x00000800, | ||
| 84 | HIL_PKT_ADDR2 = 0x00000400, | ||
| 85 | HIL_PKT_ADDR1 = 0x00000200, | ||
| 86 | HIL_PKT_ADDR0 = 0x00000100, | ||
| 87 | HIL_PKT_ADDR_MASK = 0x00000700, | ||
| 88 | HIL_PKT_ADDR_SHIFT = 8, | ||
| 89 | HIL_PKT_DATA7 = 0x00000080, | ||
| 90 | HIL_PKT_DATA6 = 0x00000040, | ||
| 91 | HIL_PKT_DATA5 = 0x00000020, | ||
| 92 | HIL_PKT_DATA4 = 0x00000010, | ||
| 93 | HIL_PKT_DATA3 = 0x00000008, | ||
| 94 | HIL_PKT_DATA2 = 0x00000004, | ||
| 95 | HIL_PKT_DATA1 = 0x00000002, | ||
| 96 | HIL_PKT_DATA0 = 0x00000001, | ||
| 97 | HIL_PKT_DATA_MASK = 0x000000FF, | ||
| 98 | HIL_PKT_DATA_SHIFT = 0 | ||
| 99 | }; | ||
| 100 | |||
| 101 | /* The HIL MLC also has several error/status/control bits. We extend the | ||
| 102 | * "packet" to include these when direct access to the MLC is available, | ||
| 103 | * or emulate them in cases where they are not available. | ||
| 104 | * | ||
| 105 | * This way the device driver knows that the underlying MLC driver | ||
| 106 | * has had to deal with loop errors. | ||
| 107 | */ | ||
| 108 | enum hil_error_bitpos { | ||
| 109 | HIL_ERR_OB = 0x00000800, /* MLC is busy sending an auto-poll, | ||
| 110 | or we have filled up the output | ||
| 111 | buffer and must wait. */ | ||
| 112 | HIL_ERR_INT = 0x00010000, /* A normal interrupt has occurred. */ | ||
| 113 | HIL_ERR_NMI = 0x00020000, /* An NMI has occurred. */ | ||
| 114 | HIL_ERR_LERR = 0x00040000, /* A poll didn't come back. */ | ||
| 115 | HIL_ERR_PERR = 0x01000000, /* There was a Parity Error. */ | ||
| 116 | HIL_ERR_FERR = 0x02000000, /* There was a Framing Error. */ | ||
| 117 | HIL_ERR_FOF = 0x04000000 /* Input FIFO Overflowed. */ | ||
| 118 | }; | ||
| 119 | |||
| 120 | enum hil_control_bitpos { | ||
| 121 | HIL_CTRL_TEST = 0x00010000, | ||
| 122 | HIL_CTRL_IPF = 0x00040000, | ||
| 123 | HIL_CTRL_APE = 0x02000000 | ||
| 124 | }; | ||
| 125 | |||
| 126 | /* Bits 30,31 are unused, we use them to control write behavior. */ | ||
| 127 | #define HIL_DO_ALTER_CTRL 0x40000000 /* Write MSW of packet to control | ||
| 128 | before writing LSW to loop */ | ||
| 129 | #define HIL_CTRL_ONLY 0xc0000000 /* *Only* alter the control registers */ | ||
| 130 | |||
| 131 | /* This gives us a 32-bit "packet" | ||
| 132 | */ | ||
| 133 | typedef u32 hil_packet; | ||
| 134 | |||
| 135 | |||
| 136 | /* HIL Loop commands | ||
| 137 | */ | ||
| 138 | enum hil_command { | ||
| 139 | HIL_CMD_IFC = 0x00, /* Interface Clear */ | ||
| 140 | HIL_CMD_EPT = 0x01, /* Enter Pass-Thru Mode */ | ||
| 141 | HIL_CMD_ELB = 0x02, /* Enter Loop-Back Mode */ | ||
| 142 | HIL_CMD_IDD = 0x03, /* Identify and Describe */ | ||
| 143 | HIL_CMD_DSR = 0x04, /* Device Soft Reset */ | ||
| 144 | HIL_CMD_PST = 0x05, /* Perform Self Test */ | ||
| 145 | HIL_CMD_RRG = 0x06, /* Read Register */ | ||
| 146 | HIL_CMD_WRG = 0x07, /* Write Register */ | ||
| 147 | HIL_CMD_ACF = 0x08, /* Auto Configure */ | ||
| 148 | HIL_CMDID_ACF = 0x07, /* Auto Configure bits with incremented ID */ | ||
| 149 | HIL_CMD_POL = 0x10, /* Poll */ | ||
| 150 | HIL_CMDCT_POL = 0x0f, /* Poll command bits with item count */ | ||
| 151 | HIL_CMD_RPL = 0x20, /* RePoll */ | ||
| 152 | HIL_CMDCT_RPL = 0x0f, /* RePoll command bits with item count */ | ||
| 153 | HIL_CMD_RNM = 0x30, /* Report Name */ | ||
| 154 | HIL_CMD_RST = 0x31, /* Report Status */ | ||
| 155 | HIL_CMD_EXD = 0x32, /* Extended Describe */ | ||
| 156 | HIL_CMD_RSC = 0x33, /* Report Security Code */ | ||
| 157 | |||
| 158 | /* 0x34 to 0x3c reserved for future use */ | ||
| 159 | |||
| 160 | HIL_CMD_DKA = 0x3d, /* Disable Keyswitch Autorepeat */ | ||
| 161 | HIL_CMD_EK1 = 0x3e, /* Enable Keyswitch Autorepeat 1 */ | ||
| 162 | HIL_CMD_EK2 = 0x3f, /* Enable Keyswitch Autorepeat 2 */ | ||
| 163 | HIL_CMD_PR1 = 0x40, /* Prompt1 */ | ||
| 164 | HIL_CMD_PR2 = 0x41, /* Prompt2 */ | ||
| 165 | HIL_CMD_PR3 = 0x42, /* Prompt3 */ | ||
| 166 | HIL_CMD_PR4 = 0x43, /* Prompt4 */ | ||
| 167 | HIL_CMD_PR5 = 0x44, /* Prompt5 */ | ||
| 168 | HIL_CMD_PR6 = 0x45, /* Prompt6 */ | ||
| 169 | HIL_CMD_PR7 = 0x46, /* Prompt7 */ | ||
| 170 | HIL_CMD_PRM = 0x47, /* Prompt (General Purpose) */ | ||
| 171 | HIL_CMD_AK1 = 0x48, /* Acknowlege1 */ | ||
| 172 | HIL_CMD_AK2 = 0x49, /* Acknowlege2 */ | ||
| 173 | HIL_CMD_AK3 = 0x4a, /* Acknowlege3 */ | ||
| 174 | HIL_CMD_AK4 = 0x4b, /* Acknowlege4 */ | ||
| 175 | HIL_CMD_AK5 = 0x4c, /* Acknowlege5 */ | ||
| 176 | HIL_CMD_AK6 = 0x4d, /* Acknowlege6 */ | ||
| 177 | HIL_CMD_AK7 = 0x4e, /* Acknowlege7 */ | ||
| 178 | HIL_CMD_ACK = 0x4f, /* Acknowlege (General Purpose) */ | ||
| 179 | |||
| 180 | /* 0x50 to 0x78 reserved for future use */ | ||
| 181 | /* 0x80 to 0xEF device-specific commands */ | ||
| 182 | /* 0xf0 to 0xf9 reserved for future use */ | ||
| 183 | |||
| 184 | HIL_CMD_RIO = 0xfa, /* Register I/O Error */ | ||
| 185 | HIL_CMD_SHR = 0xfb, /* System Hard Reset */ | ||
| 186 | HIL_CMD_TER = 0xfc, /* Transmission Error */ | ||
| 187 | HIL_CMD_CAE = 0xfd, /* Configuration Address Error */ | ||
| 188 | HIL_CMD_DHR = 0xfe, /* Device Hard Reset */ | ||
| 189 | |||
| 190 | /* 0xff is prohibited from use. */ | ||
| 191 | }; | ||
| 192 | |||
| 193 | |||
| 194 | /* | ||
| 195 | * Response "records" to HIL commands | ||
| 196 | */ | ||
| 197 | |||
| 198 | /* Device ID byte | ||
| 199 | */ | ||
| 200 | #define HIL_IDD_DID_TYPE_MASK 0xe0 /* Primary type bits */ | ||
| 201 | #define HIL_IDD_DID_TYPE_KB_INTEGRAL 0xa0 /* Integral keyboard */ | ||
| 202 | #define HIL_IDD_DID_TYPE_KB_ITF 0xc0 /* ITD keyboard */ | ||
| 203 | #define HIL_IDD_DID_TYPE_KB_RSVD 0xe0 /* Reserved keyboard type */ | ||
| 204 | #define HIL_IDD_DID_TYPE_KB_LANG_MASK 0x1f /* Keyboard locale bits */ | ||
| 205 | #define HIL_IDD_DID_KBLANG_USE_ESD 0x00 /* Use ESD Locale instead */ | ||
| 206 | #define HIL_IDD_DID_TYPE_ABS 0x80 /* Absolute Positioners */ | ||
| 207 | #define HIL_IDD_DID_ABS_RSVD1_MASK 0xf8 /* Reserved */ | ||
| 208 | #define HIL_IDD_DID_ABS_RSVD1 0x98 | ||
| 209 | #define HIL_IDD_DID_ABS_TABLET_MASK 0xf8 /* Tablets and digitizers */ | ||
| 210 | #define HIL_IDD_DID_ABS_TABLET 0x90 | ||
| 211 | #define HIL_IDD_DID_ABS_TSCREEN_MASK 0xfc /* Touch screens */ | ||
| 212 | #define HIL_IDD_DID_ABS_TSCREEN 0x8c | ||
| 213 | #define HIL_IDD_DID_ABS_RSVD2_MASK 0xfc /* Reserved */ | ||
| 214 | #define HIL_IDD_DID_ABS_RSVD2 0x88 | ||
| 215 | #define HIL_IDD_DID_ABS_RSVD3_MASK 0xfc /* Reserved */ | ||
| 216 | #define HIL_IDD_DID_ABS_RSVD3 0x80 | ||
| 217 | #define HIL_IDD_DID_TYPE_REL 0x60 /* Relative Positioners */ | ||
| 218 | #define HIL_IDD_DID_REL_RSVD1_MASK 0xf0 /* Reserved */ | ||
| 219 | #define HIL_IDD_DID_REL_RSVD1 0x70 | ||
| 220 | #define HIL_IDD_DID_REL_RSVD2_MASK 0xfc /* Reserved */ | ||
| 221 | #define HIL_IDD_DID_REL_RSVD2 0x6c | ||
| 222 | #define HIL_IDD_DID_REL_MOUSE_MASK 0xfc /* Mouse */ | ||
| 223 | #define HIL_IDD_DID_REL_MOUSE 0x68 | ||
| 224 | #define HIL_IDD_DID_REL_QUAD_MASK 0xf8 /* Other Quadrature Devices */ | ||
| 225 | #define HIL_IDD_DID_REL_QUAD 0x60 | ||
| 226 | #define HIL_IDD_DID_TYPE_CHAR 0x40 /* Character Entry */ | ||
| 227 | #define HIL_IDD_DID_CHAR_BARCODE_MASK 0xfc /* Barcode Reader */ | ||
| 228 | #define HIL_IDD_DID_CHAR_BARCODE 0x5c | ||
| 229 | #define HIL_IDD_DID_CHAR_RSVD1_MASK 0xfc /* Reserved */ | ||
| 230 | #define HIL_IDD_DID_CHAR_RSVD1 0x58 | ||
| 231 | #define HIL_IDD_DID_CHAR_RSVD2_MASK 0xf8 /* Reserved */ | ||
| 232 | #define HIL_IDD_DID_CHAR_RSVD2 0x50 | ||
| 233 | #define HIL_IDD_DID_CHAR_RSVD3_MASK 0xf0 /* Reserved */ | ||
| 234 | #define HIL_IDD_DID_CHAR_RSVD3 0x40 | ||
| 235 | #define HIL_IDD_DID_TYPE_OTHER 0x20 /* Miscellaneous */ | ||
| 236 | #define HIL_IDD_DID_OTHER_RSVD1_MASK 0xf0 /* Reserved */ | ||
| 237 | #define HIL_IDD_DID_OTHER_RSVD1 0x30 | ||
| 238 | #define HIL_IDD_DID_OTHER_BARCODE_MASK 0xfc /* Tone Generator */ | ||
| 239 | #define HIL_IDD_DID_OTHER_BARCODE 0x2c | ||
| 240 | #define HIL_IDD_DID_OTHER_RSVD2_MASK 0xfc /* Reserved */ | ||
| 241 | #define HIL_IDD_DID_OTHER_RSVD2 0x28 | ||
| 242 | #define HIL_IDD_DID_OTHER_RSVD3_MASK 0xf8 /* Reserved */ | ||
| 243 | #define HIL_IDD_DID_OTHER_RSVD3 0x20 | ||
| 244 | #define HIL_IDD_DID_TYPE_KEYPAD 0x00 /* Vectra Keyboard */ | ||
| 245 | |||
| 246 | /* IDD record header | ||
| 247 | */ | ||
| 248 | #define HIL_IDD_HEADER_AXSET_MASK 0x03 /* Number of axis in a set */ | ||
| 249 | #define HIL_IDD_HEADER_RSC 0x04 /* Supports RSC command */ | ||
| 250 | #define HIL_IDD_HEADER_EXD 0x08 /* Supports EXD command */ | ||
| 251 | #define HIL_IDD_HEADER_IOD 0x10 /* IOD byte to follow */ | ||
| 252 | #define HIL_IDD_HEADER_16BIT 0x20 /* 16 (vs. 8) bit resolution */ | ||
| 253 | #define HIL_IDD_HEADER_ABS 0x40 /* Reports Absolute Position */ | ||
| 254 | #define HIL_IDD_HEADER_2X_AXIS 0x80 /* Two sets of 1-3 axis */ | ||
| 255 | |||
| 256 | /* I/O Descriptor | ||
| 257 | */ | ||
| 258 | #define HIL_IDD_IOD_NBUTTON_MASK 0x07 /* Number of buttons */ | ||
| 259 | #define HIL_IDD_IOD_PROXIMITY 0x08 /* Proximity in/out events */ | ||
| 260 | #define HIL_IDD_IOD_PROMPT_MASK 0x70 /* Number of prompts/acks */ | ||
| 261 | #define HIL_IDD_IOD_PROMPT_SHIFT 4 | ||
| 262 | #define HIL_IDD_IOD_PROMPT 0x80 /* Generic prompt/ack */ | ||
| 263 | |||
| 264 | #define HIL_IDD_NUM_AXES_PER_SET(header_packet) \ | ||
| 265 | ((header_packet) & HIL_IDD_HEADER_AXSET_MASK) | ||
| 266 | |||
| 267 | #define HIL_IDD_NUM_AXSETS(header_packet) \ | ||
| 268 | (2 - !((header_packet) & HIL_IDD_HEADER_2X_AXIS)) | ||
| 269 | |||
| 270 | #define HIL_IDD_LEN(header_packet) \ | ||
| 271 | ((4 - !(header_packet & HIL_IDD_HEADER_IOD) - \ | ||
| 272 | 2 * !(HIL_IDD_NUM_AXES_PER_SET(header_packet))) + \ | ||
| 273 | 2 * HIL_IDD_NUM_AXES_PER_SET(header_packet) * \ | ||
| 274 | !!((header_packet) & HIL_IDD_HEADER_ABS)) | ||
| 275 | |||
| 276 | /* The following HIL_IDD_* macros assume you have an array of | ||
| 277 | * packets and/or unpacked 8-bit data in the order that they | ||
| 278 | * were received. | ||
| 279 | */ | ||
| 280 | |||
| 281 | #define HIL_IDD_AXIS_COUNTS_PER_M(header_ptr) \ | ||
| 282 | (!(HIL_IDD_NUM_AXSETS(*(header_ptr))) ? -1 : \ | ||
| 283 | (((*(header_ptr + 1) & HIL_PKT_DATA_MASK) + \ | ||
| 284 | ((*(header_ptr + 2) & HIL_PKT_DATA_MASK)) << 8) \ | ||
| 285 | * ((*(header_ptr) & HIL_IDD_HEADER_16BIT) ? 100 : 1))) | ||
| 286 | |||
| 287 | #define HIL_IDD_AXIS_MAX(header_ptr, __axnum) \ | ||
| 288 | ((!(*(header_ptr) & HIL_IDD_HEADER_ABS) || \ | ||
| 289 | (HIL_IDD_NUM_AXES_PER_SET(*(header_ptr)) <= __axnum)) ? 0 : \ | ||
| 290 | ((HIL_PKT_DATA_MASK & *((header_ptr) + 3 + 2 * __axnum)) + \ | ||
| 291 | ((HIL_PKT_DATA_MASK & *((header_ptr) + 4 + 2 * __axnum)) << 8))) | ||
| 292 | |||
| 293 | #define HIL_IDD_IOD(header_ptr) \ | ||
| 294 | (*(header_ptr + HIL_IDD_LEN((*header_ptr)) - 1)) | ||
| 295 | |||
| 296 | #define HIL_IDD_HAS_GEN_PROMPT(header_ptr) \ | ||
| 297 | ((*header_ptr & HIL_IDD_HEADER_IOD) && \ | ||
| 298 | (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROMPT)) | ||
| 299 | |||
| 300 | #define HIL_IDD_HAS_GEN_PROXIMITY(header_ptr) \ | ||
| 301 | ((*header_ptr & HIL_IDD_HEADER_IOD) && \ | ||
| 302 | (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROXIMITY)) | ||
| 303 | |||
| 304 | #define HIL_IDD_NUM_BUTTONS(header_ptr) \ | ||
| 305 | ((*header_ptr & HIL_IDD_HEADER_IOD) ? \ | ||
| 306 | (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NBUTTON_MASK) : 0) | ||
| 307 | |||
| 308 | #define HIL_IDD_NUM_PROMPTS(header_ptr) \ | ||
| 309 | ((*header_ptr & HIL_IDD_HEADER_IOD) ? \ | ||
| 310 | ((HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NPROMPT_MASK) \ | ||
| 311 | >> HIL_IDD_IOD_PROMPT_SHIFT) : 0) | ||
| 312 | |||
| 313 | /* The response to HIL EXD commands -- the "extended describe record" */ | ||
| 314 | #define HIL_EXD_HEADER_WRG 0x03 /* Supports type2 WRG */ | ||
| 315 | #define HIL_EXD_HEADER_WRG_TYPE1 0x01 /* Supports type1 WRG */ | ||
| 316 | #define HIL_EXD_HEADER_WRG_TYPE2 0x02 /* Supports type2 WRG */ | ||
| 317 | #define HIL_EXD_HEADER_RRG 0x04 /* Supports RRG command */ | ||
| 318 | #define HIL_EXD_HEADER_RNM 0x10 /* Supports RNM command */ | ||
| 319 | #define HIL_EXD_HEADER_RST 0x20 /* Supports RST command */ | ||
| 320 | #define HIL_EXD_HEADER_LOCALE 0x40 /* Contains locale code */ | ||
| 321 | |||
| 322 | #define HIL_EXD_NUM_RRG(header_ptr) \ | ||
| 323 | ((*header_ptr & HIL_EXD_HEADER_RRG) ? \ | ||
| 324 | (*(header_ptr + 1) & HIL_PKT_DATA_MASK) : 0) | ||
| 325 | |||
| 326 | #define HIL_EXD_NUM_WWG(header_ptr) \ | ||
| 327 | ((*header_ptr & HIL_EXD_HEADER_WRG) ? \ | ||
| 328 | (*(header_ptr + 2 - !(*header_ptr & HIL_EXD_HEADER_RRG)) & \ | ||
| 329 | HIL_PKT_DATA_MASK) : 0) | ||
| 330 | |||
| 331 | #define HIL_EXD_LEN(header_ptr) \ | ||
| 332 | (!!(*header_ptr & HIL_EXD_HEADER_RRG) + \ | ||
| 333 | !!(*header_ptr & HIL_EXD_HEADER_WRG) + \ | ||
| 334 | !!(*header_ptr & HIL_EXD_HEADER_LOCALE) + \ | ||
| 335 | 2 * !!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) + 1) | ||
| 336 | |||
| 337 | #define HIL_EXD_LOCALE(header_ptr) \ | ||
| 338 | (!(*header_ptr & HIL_EXD_HEADER_LOCALE) ? -1 : \ | ||
| 339 | (*(header_ptr + HIL_EXD_LEN(header_ptr) - 1) & HIL_PKT_DATA_MASK)) | ||
| 340 | |||
| 341 | #define HIL_EXD_WRG_TYPE2_LEN(header_ptr) \ | ||
| 342 | (!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) ? -1 : \ | ||
| 343 | (*(header_ptr + HIL_EXD_LEN(header_ptr) - 2 - \ | ||
| 344 | !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) + \ | ||
| 345 | ((*(header_ptr + HIL_EXD_LEN(header_ptr) - 1 - \ | ||
| 346 | !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) << 8)) | ||
| 347 | |||
| 348 | /* Device locale codes. */ | ||
| 349 | |||
| 350 | /* Last defined locale code. Everything above this is "Reserved", | ||
| 351 | and note that this same table applies to the Device ID Byte where | ||
| 352 | keyboards may have a nationality code which is only 5 bits. */ | ||
| 353 | #define HIL_LOCALE_MAX 0x1f | ||
| 354 | |||
| 355 | /* Map to hopefully useful strings. I was trying to make these look | ||
| 356 | like locale.aliases strings do; maybe that isn't the right table to | ||
| 357 | emulate. In either case, I didn't have much to work on. */ | ||
| 358 | #define HIL_LOCALE_MAP \ | ||
| 359 | "", /* 0x00 Reserved */ \ | ||
| 360 | "", /* 0x01 Reserved */ \ | ||
| 361 | "", /* 0x02 Reserved */ \ | ||
| 362 | "swiss.french", /* 0x03 Swiss/French */ \ | ||
| 363 | "portuguese", /* 0x04 Portuguese */ \ | ||
| 364 | "arabic", /* 0x05 Arabic */ \ | ||
| 365 | "hebrew", /* 0x06 Hebrew */ \ | ||
| 366 | "english.canadian", /* 0x07 Canadian English */ \ | ||
| 367 | "turkish", /* 0x08 Turkish */ \ | ||
| 368 | "greek", /* 0x09 Greek */ \ | ||
| 369 | "thai", /* 0x0a Thai (Thailand) */ \ | ||
| 370 | "italian", /* 0x0b Italian */ \ | ||
| 371 | "korean", /* 0x0c Hangul (Korea) */ \ | ||
| 372 | "dutch", /* 0x0d Dutch */ \ | ||
| 373 | "swedish", /* 0x0e Swedish */ \ | ||
| 374 | "german", /* 0x0f German */ \ | ||
| 375 | "chinese", /* 0x10 Chinese-PRC */ \ | ||
| 376 | "chinese", /* 0x11 Chinese-ROC */ \ | ||
| 377 | "swiss.french", /* 0x12 Swiss/French II */ \ | ||
| 378 | "spanish", /* 0x13 Spanish */ \ | ||
| 379 | "swiss.german", /* 0x14 Swiss/German II */ \ | ||
| 380 | "flemish", /* 0x15 Belgian (Flemish) */ \ | ||
| 381 | "finnish", /* 0x16 Finnish */ \ | ||
| 382 | "english.uk", /* 0x17 United Kingdom */ \ | ||
| 383 | "french.canadian", /* 0x18 French/Canadian */ \ | ||
| 384 | "swiss.german", /* 0x19 Swiss/German */ \ | ||
| 385 | "norwegian", /* 0x1a Norwegian */ \ | ||
| 386 | "french", /* 0x1b French */ \ | ||
| 387 | "danish", /* 0x1c Danish */ \ | ||
| 388 | "japanese", /* 0x1d Katakana */ \ | ||
| 389 | "spanish", /* 0x1e Latin American/Spanish*/\ | ||
| 390 | "english.us" /* 0x1f United States */ \ | ||
| 391 | |||
| 392 | |||
| 393 | /* HIL keycodes */ | ||
| 394 | #define HIL_KEYCODES_SET1_TBLSIZE 128 | ||
| 395 | #define HIL_KEYCODES_SET1 \ | ||
| 396 | KEY_5, KEY_RESERVED, KEY_RIGHTALT, KEY_LEFTALT, \ | ||
| 397 | KEY_RIGHTSHIFT, KEY_LEFTSHIFT, KEY_LEFTCTRL, KEY_SYSRQ, \ | ||
| 398 | KEY_KP4, KEY_KP8, KEY_KP5, KEY_KP9, \ | ||
| 399 | KEY_KP6, KEY_KP7, KEY_KPCOMMA, KEY_KPENTER, \ | ||
| 400 | KEY_KP1, KEY_KPSLASH, KEY_KP2, KEY_KPPLUS, \ | ||
| 401 | KEY_KP3, KEY_KPASTERISK, KEY_KP0, KEY_KPMINUS, \ | ||
| 402 | KEY_B, KEY_V, KEY_C, KEY_X, \ | ||
| 403 | KEY_Z, KEY_RESERVED, KEY_RESERVED, KEY_ESC, \ | ||
| 404 | KEY_6, KEY_F10, KEY_3, KEY_F11, \ | ||
| 405 | KEY_KPDOT, KEY_F9, KEY_TAB /*KP*/, KEY_F12, \ | ||
| 406 | KEY_H, KEY_G, KEY_F, KEY_D, \ | ||
| 407 | KEY_S, KEY_A, KEY_RESERVED, KEY_CAPSLOCK, \ | ||
| 408 | KEY_U, KEY_Y, KEY_T, KEY_R, \ | ||
| 409 | KEY_E, KEY_W, KEY_Q, KEY_TAB, \ | ||
| 410 | KEY_7, KEY_6, KEY_5, KEY_4, \ | ||
| 411 | KEY_3, KEY_2, KEY_1, KEY_GRAVE, \ | ||
| 412 | KEY_F13, KEY_F14, KEY_F15, KEY_F16, \ | ||
| 413 | KEY_F17, KEY_F18, KEY_F19, KEY_F20, \ | ||
| 414 | KEY_MENU, KEY_F4, KEY_F3, KEY_F2, \ | ||
| 415 | KEY_F1, KEY_VOLUMEUP, KEY_STOP, KEY_SENDFILE, \ | ||
| 416 | KEY_SYSRQ, KEY_F5, KEY_F6, KEY_F7, \ | ||
| 417 | KEY_F8, KEY_VOLUMEDOWN, KEY_DEL_EOL, KEY_DEL_EOS, \ | ||
| 418 | KEY_8, KEY_9, KEY_0, KEY_MINUS, \ | ||
| 419 | KEY_EQUAL, KEY_BACKSPACE, KEY_INS_LINE, KEY_DEL_LINE, \ | ||
| 420 | KEY_I, KEY_O, KEY_P, KEY_LEFTBRACE, \ | ||
| 421 | KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_INSERT, KEY_DELETE, \ | ||
| 422 | KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, \ | ||
| 423 | KEY_APOSTROPHE, KEY_ENTER, KEY_HOME, KEY_PAGEUP, \ | ||
| 424 | KEY_M, KEY_COMMA, KEY_DOT, KEY_SLASH, \ | ||
| 425 | KEY_BACKSLASH, KEY_SELECT, KEY_102ND, KEY_PAGEDOWN, \ | ||
| 426 | KEY_N, KEY_SPACE, KEY_NEXT, KEY_RESERVED, \ | ||
| 427 | KEY_LEFT, KEY_DOWN, KEY_UP, KEY_RIGHT | ||
| 428 | |||
| 429 | |||
| 430 | #define HIL_KEYCODES_SET3_TBLSIZE 128 | ||
| 431 | #define HIL_KEYCODES_SET3 \ | ||
| 432 | KEY_RESERVED, KEY_ESC, KEY_1, KEY_2, \ | ||
| 433 | KEY_3, KEY_4, KEY_5, KEY_6, \ | ||
| 434 | KEY_7, KEY_8, KEY_9, KEY_0, \ | ||
| 435 | KEY_MINUS, KEY_EQUAL, KEY_BACKSPACE, KEY_TAB, \ | ||
| 436 | KEY_Q, KEY_W, KEY_E, KEY_R, \ | ||
| 437 | KEY_T, KEY_Y, KEY_U, KEY_I, \ | ||
| 438 | KEY_O, KEY_P, KEY_LEFTBRACE, KEY_RIGHTBRACE, \ | ||
| 439 | KEY_ENTER, KEY_LEFTCTRL, KEY_A, KEY_S, \ | ||
| 440 | KEY_D, KEY_F, KEY_G, KEY_H, \ | ||
| 441 | KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, \ | ||
| 442 | KEY_APOSTROPHE,KEY_GRAVE, KEY_LEFTSHIFT, KEY_BACKSLASH, \ | ||
| 443 | KEY_Z, KEY_X, KEY_C, KEY_V, \ | ||
| 444 | KEY_B, KEY_N, KEY_M, KEY_COMMA, \ | ||
| 445 | KEY_DOT, KEY_SLASH, KEY_RIGHTSHIFT, KEY_KPASTERISK, \ | ||
| 446 | KEY_LEFTALT, KEY_SPACE, KEY_CAPSLOCK, KEY_F1, \ | ||
| 447 | KEY_F2, KEY_F3, KEY_F4, KEY_F5, \ | ||
| 448 | KEY_F6, KEY_F7, KEY_F8, KEY_F9, \ | ||
| 449 | KEY_F10, KEY_NUMLOCK, KEY_SCROLLLOCK, KEY_KP7, \ | ||
| 450 | KEY_KP8, KEY_KP9, KEY_KPMINUS, KEY_KP4, \ | ||
| 451 | KEY_KP5, KEY_KP6, KEY_KPPLUS, KEY_KP1, \ | ||
| 452 | KEY_KP2, KEY_KP3, KEY_KP0, KEY_KPDOT, \ | ||
| 453 | KEY_SYSRQ, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \ | ||
| 454 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \ | ||
| 455 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \ | ||
| 456 | KEY_UP, KEY_LEFT, KEY_DOWN, KEY_RIGHT, \ | ||
| 457 | KEY_HOME, KEY_PAGEUP, KEY_END, KEY_PAGEDOWN, \ | ||
| 458 | KEY_INSERT, KEY_DELETE, KEY_102ND, KEY_RESERVED, \ | ||
| 459 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \ | ||
| 460 | KEY_F1, KEY_F2, KEY_F3, KEY_F4, \ | ||
| 461 | KEY_F5, KEY_F6, KEY_F7, KEY_F8, \ | ||
| 462 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \ | ||
| 463 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED | ||
| 464 | |||
| 465 | |||
| 466 | /* Response to POL command, the "poll record header" */ | ||
| 467 | |||
| 468 | #define HIL_POL_NUM_AXES_MASK 0x03 /* Number of axis reported */ | ||
| 469 | #define HIL_POL_CTS 0x04 /* Device ready to receive data */ | ||
| 470 | #define HIL_POL_STATUS_PENDING 0x08 /* Device has status to report */ | ||
| 471 | #define HIL_POL_CHARTYPE_MASK 0x70 /* Type of character data to follow */ | ||
| 472 | #define HIL_POL_CHARTYPE_NONE 0x00 /* No character data to follow */ | ||
| 473 | #define HIL_POL_CHARTYPE_RSVD1 0x10 /* Reserved Set 1 */ | ||
| 474 | #define HIL_POL_CHARTYPE_ASCII 0x20 /* U.S. ASCII */ | ||
| 475 | #define HIL_POL_CHARTYPE_BINARY 0x30 /* Binary data */ | ||
| 476 | #define HIL_POL_CHARTYPE_SET1 0x40 /* Keycode Set 1 */ | ||
| 477 | #define HIL_POL_CHARTYPE_RSVD2 0x50 /* Reserved Set 2 */ | ||
| 478 | #define HIL_POL_CHARTYPE_SET2 0x60 /* Keycode Set 2 */ | ||
| 479 | #define HIL_POL_CHARTYPE_SET3 0x70 /* Keycode Set 3 */ | ||
| 480 | #define HIL_POL_AXIS_ALT 0x80 /* Data is from axis set 2 */ | ||
| 481 | |||
| 482 | |||
| 483 | #endif /* _HIL_H_ */ | ||
diff --git a/include/linux/hil_mlc.h b/include/linux/hil_mlc.h new file mode 100644 index 000000000000..8df29ca48a13 --- /dev/null +++ b/include/linux/hil_mlc.h | |||
| @@ -0,0 +1,168 @@ | |||
| 1 | /* | ||
| 2 | * HP Human Interface Loop Master Link Controller driver. | ||
| 3 | * | ||
| 4 | * Copyright (c) 2001 Brian S. Julin | ||
| 5 | * All rights reserved. | ||
| 6 | * | ||
| 7 | * Redistribution and use in source and binary forms, with or without | ||
| 8 | * modification, are permitted provided that the following conditions | ||
| 9 | * are met: | ||
| 10 | * 1. Redistributions of source code must retain the above copyright | ||
| 11 | * notice, this list of conditions, and the following disclaimer, | ||
| 12 | * without modification. | ||
| 13 | * 2. The name of the author may not be used to endorse or promote products | ||
| 14 | * derived from this software without specific prior written permission. | ||
| 15 | * | ||
| 16 | * Alternatively, this software may be distributed under the terms of the | ||
| 17 | * GNU General Public License ("GPL"). | ||
| 18 | * | ||
| 19 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
| 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 21 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| 22 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR | ||
| 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| 24 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| 25 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 26 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| 27 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| 28 | * | ||
| 29 | * References: | ||
| 30 | * HP-HIL Technical Reference Manual. Hewlett Packard Product No. 45918A | ||
| 31 | * | ||
| 32 | */ | ||
| 33 | |||
| 34 | #include <linux/hil.h> | ||
| 35 | #include <linux/time.h> | ||
| 36 | #include <linux/interrupt.h> | ||
| 37 | #include <asm/semaphore.h> | ||
| 38 | #include <linux/serio.h> | ||
| 39 | #include <linux/list.h> | ||
| 40 | |||
| 41 | typedef struct hil_mlc hil_mlc; | ||
| 42 | |||
| 43 | /* The HIL has a complicated state engine. | ||
| 44 | * We define the structure of nodes in the state engine here. | ||
| 45 | */ | ||
| 46 | enum hilse_act { | ||
| 47 | /* HILSE_OUT prepares to receive input if the next node | ||
| 48 | * is an IN or EXPECT, and then sends the given packet. | ||
| 49 | */ | ||
| 50 | HILSE_OUT = 0, | ||
| 51 | |||
| 52 | /* HILSE_CTS checks if the loop is busy. */ | ||
| 53 | HILSE_CTS, | ||
| 54 | |||
| 55 | /* HILSE_OUT_LAST sends the given command packet to | ||
| 56 | * the last configured/running device on the loop. | ||
| 57 | */ | ||
| 58 | HILSE_OUT_LAST, | ||
| 59 | |||
| 60 | /* HILSE_OUT_DISC sends the given command packet to | ||
| 61 | * the next device past the last configured/running one. | ||
| 62 | */ | ||
| 63 | HILSE_OUT_DISC, | ||
| 64 | |||
| 65 | /* HILSE_FUNC runs a callback function with given arguments. | ||
| 66 | * a positive return value causes the "ugly" branch to be taken. | ||
| 67 | */ | ||
| 68 | HILSE_FUNC, | ||
| 69 | |||
| 70 | /* HILSE_IN simply expects any non-errored packet to arrive | ||
| 71 | * within arg usecs. | ||
| 72 | */ | ||
| 73 | HILSE_IN = 0x100, | ||
| 74 | |||
| 75 | /* HILSE_EXPECT expects a particular packet to arrive | ||
| 76 | * within arg usecs, any other packet is considered an error. | ||
| 77 | */ | ||
| 78 | HILSE_EXPECT, | ||
| 79 | |||
| 80 | /* HILSE_EXPECT_LAST as above but dev field should be last | ||
| 81 | * discovered/operational device. | ||
| 82 | */ | ||
| 83 | HILSE_EXPECT_LAST, | ||
| 84 | |||
| 85 | /* HILSE_EXPECT_LAST as above but dev field should be first | ||
| 86 | * undiscovered/inoperational device. | ||
| 87 | */ | ||
| 88 | HILSE_EXPECT_DISC | ||
| 89 | }; | ||
| 90 | |||
| 91 | typedef int (hilse_func) (hil_mlc *mlc, int arg); | ||
| 92 | struct hilse_node { | ||
| 93 | enum hilse_act act; /* How to process this node */ | ||
| 94 | union { | ||
| 95 | hilse_func *func; /* Function to call if HILSE_FUNC */ | ||
| 96 | hil_packet packet; /* Packet to send or to compare */ | ||
| 97 | } object; | ||
| 98 | int arg; /* Timeout in usec or parm for func */ | ||
| 99 | int good; /* Node to jump to on success */ | ||
| 100 | int bad; /* Node to jump to on error */ | ||
| 101 | int ugly; /* Node to jump to on timeout */ | ||
| 102 | }; | ||
| 103 | |||
| 104 | /* Methods for back-end drivers, e.g. hp_sdc_mlc */ | ||
| 105 | typedef int (hil_mlc_cts) (hil_mlc *mlc); | ||
| 106 | typedef void (hil_mlc_out) (hil_mlc *mlc); | ||
| 107 | typedef int (hil_mlc_in) (hil_mlc *mlc, suseconds_t timeout); | ||
| 108 | |||
| 109 | struct hil_mlc_devinfo { | ||
| 110 | uint8_t idd[16]; /* Device ID Byte and Describe Record */ | ||
| 111 | uint8_t rsc[16]; /* Security Code Header and Record */ | ||
| 112 | uint8_t exd[16]; /* Extended Describe Record */ | ||
| 113 | uint8_t rnm[16]; /* Device name as returned by RNM command */ | ||
| 114 | }; | ||
| 115 | |||
| 116 | struct hil_mlc_serio_map { | ||
| 117 | hil_mlc *mlc; | ||
| 118 | int di_revmap; | ||
| 119 | int didx; | ||
| 120 | }; | ||
| 121 | |||
| 122 | /* How many (possibly old/detached) devices the we try to keep track of */ | ||
| 123 | #define HIL_MLC_DEVMEM 16 | ||
| 124 | |||
| 125 | struct hil_mlc { | ||
| 126 | struct list_head list; /* hil_mlc is organized as linked list */ | ||
| 127 | |||
| 128 | rwlock_t lock; | ||
| 129 | |||
| 130 | void *priv; /* Data specific to a particular type of MLC */ | ||
| 131 | |||
| 132 | int seidx; /* Current node in state engine */ | ||
| 133 | int istarted, ostarted; | ||
| 134 | |||
| 135 | hil_mlc_cts *cts; | ||
| 136 | struct semaphore csem; /* Raised when loop idle */ | ||
| 137 | |||
| 138 | hil_mlc_out *out; | ||
| 139 | struct semaphore osem; /* Raised when outpacket dispatched */ | ||
| 140 | hil_packet opacket; | ||
| 141 | |||
| 142 | hil_mlc_in *in; | ||
| 143 | struct semaphore isem; /* Raised when a packet arrives */ | ||
| 144 | hil_packet ipacket[16]; | ||
| 145 | hil_packet imatch; | ||
| 146 | int icount; | ||
| 147 | struct timeval instart; | ||
| 148 | suseconds_t intimeout; | ||
| 149 | |||
| 150 | int ddi; /* Last operational device id */ | ||
| 151 | int lcv; /* LCV to throttle loops */ | ||
| 152 | struct timeval lcv_tv; /* Time loop was started */ | ||
| 153 | |||
| 154 | int di_map[7]; /* Maps below items to live devs */ | ||
| 155 | struct hil_mlc_devinfo di[HIL_MLC_DEVMEM]; | ||
| 156 | struct serio *serio[HIL_MLC_DEVMEM]; | ||
| 157 | struct hil_mlc_serio_map serio_map[HIL_MLC_DEVMEM]; | ||
| 158 | hil_packet serio_opacket[HIL_MLC_DEVMEM]; | ||
| 159 | int serio_oidx[HIL_MLC_DEVMEM]; | ||
| 160 | struct hil_mlc_devinfo di_scratch; /* Temporary area */ | ||
| 161 | |||
| 162 | int opercnt; | ||
| 163 | |||
| 164 | struct tasklet_struct *tasklet; | ||
| 165 | }; | ||
| 166 | |||
| 167 | int hil_mlc_register(hil_mlc *mlc); | ||
| 168 | int hil_mlc_unregister(hil_mlc *mlc); | ||
diff --git a/include/linux/hp_sdc.h b/include/linux/hp_sdc.h new file mode 100644 index 000000000000..debd71515312 --- /dev/null +++ b/include/linux/hp_sdc.h | |||
| @@ -0,0 +1,300 @@ | |||
| 1 | /* | ||
| 2 | * HP i8042 System Device Controller -- header | ||
| 3 | * | ||
| 4 | * Copyright (c) 2001 Brian S. Julin | ||
| 5 | * All rights reserved. | ||
| 6 | * | ||
| 7 | * Redistribution and use in source and binary forms, with or without | ||
| 8 | * modification, are permitted provided that the following conditions | ||
| 9 | * are met: | ||
| 10 | * 1. Redistributions of source code must retain the above copyright | ||
| 11 | * notice, this list of conditions, and the following disclaimer, | ||
| 12 | * without modification. | ||
| 13 | * 2. The name of the author may not be used to endorse or promote products | ||
| 14 | * derived from this software without specific prior written permission. | ||
| 15 | * | ||
| 16 | * Alternatively, this software may be distributed under the terms of the | ||
| 17 | * GNU General Public License ("GPL"). | ||
| 18 | * | ||
| 19 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
| 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 21 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| 22 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR | ||
| 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| 24 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| 25 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 26 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| 27 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| 28 | * | ||
| 29 | * References: | ||
| 30 | * | ||
| 31 | * HP-HIL Technical Reference Manual. Hewlett Packard Product No. 45918A | ||
| 32 | * | ||
| 33 | * System Device Controller Microprocessor Firmware Theory of Operation | ||
| 34 | * for Part Number 1820-4784 Revision B. Dwg No. A-1820-4784-2 | ||
| 35 | * | ||
| 36 | */ | ||
| 37 | |||
| 38 | #ifndef _LINUX_HP_SDC_H | ||
| 39 | #define _LINUX_HP_SDC_H | ||
| 40 | |||
| 41 | #include <linux/interrupt.h> | ||
| 42 | #include <linux/types.h> | ||
| 43 | #include <linux/time.h> | ||
| 44 | #include <linux/timer.h> | ||
| 45 | #if defined(__hppa__) | ||
| 46 | #include <asm/hardware.h> | ||
| 47 | #endif | ||
| 48 | |||
| 49 | |||
| 50 | /* No 4X status reads take longer than this (in usec). | ||
| 51 | */ | ||
| 52 | #define HP_SDC_MAX_REG_DELAY 20000 | ||
| 53 | |||
| 54 | typedef void (hp_sdc_irqhook) (int irq, void *dev_id, | ||
| 55 | uint8_t status, uint8_t data); | ||
| 56 | |||
| 57 | int hp_sdc_request_timer_irq(hp_sdc_irqhook *callback); | ||
| 58 | int hp_sdc_request_hil_irq(hp_sdc_irqhook *callback); | ||
| 59 | int hp_sdc_request_cooked_irq(hp_sdc_irqhook *callback); | ||
| 60 | int hp_sdc_release_timer_irq(hp_sdc_irqhook *callback); | ||
| 61 | int hp_sdc_release_hil_irq(hp_sdc_irqhook *callback); | ||
| 62 | int hp_sdc_release_cooked_irq(hp_sdc_irqhook *callback); | ||
| 63 | |||
| 64 | typedef struct { | ||
| 65 | int actidx; /* Start of act. Acts are atomic WRT I/O to SDC */ | ||
| 66 | int idx; /* Index within the act */ | ||
| 67 | int endidx; /* transaction is over and done if idx == endidx */ | ||
| 68 | uint8_t *seq; /* commands/data for the transaction */ | ||
| 69 | union { | ||
| 70 | hp_sdc_irqhook *irqhook; /* Callback, isr or tasklet context */ | ||
| 71 | struct semaphore *semaphore; /* Semaphore to sleep on. */ | ||
| 72 | } act; | ||
| 73 | } hp_sdc_transaction; | ||
| 74 | int hp_sdc_enqueue_transaction(hp_sdc_transaction *this); | ||
| 75 | int hp_sdc_dequeue_transaction(hp_sdc_transaction *this); | ||
| 76 | |||
| 77 | /* The HP_SDC_ACT* values are peculiar to this driver. | ||
| 78 | * Nuance: never HP_SDC_ACT_DATAIN | HP_SDC_ACT_DEALLOC, use another | ||
| 79 | * act to perform the dealloc. | ||
| 80 | */ | ||
| 81 | #define HP_SDC_ACT_PRECMD 0x01 /* Send a command first */ | ||
| 82 | #define HP_SDC_ACT_DATAREG 0x02 /* Set data registers */ | ||
| 83 | #define HP_SDC_ACT_DATAOUT 0x04 /* Send data bytes */ | ||
| 84 | #define HP_SDC_ACT_POSTCMD 0x08 /* Send command after */ | ||
| 85 | #define HP_SDC_ACT_DATAIN 0x10 /* Collect data after */ | ||
| 86 | #define HP_SDC_ACT_DURING 0x1f | ||
| 87 | #define HP_SDC_ACT_SEMAPHORE 0x20 /* Raise semaphore after */ | ||
| 88 | #define HP_SDC_ACT_CALLBACK 0x40 /* Pass data to IRQ handler */ | ||
| 89 | #define HP_SDC_ACT_DEALLOC 0x80 /* Destroy transaction after */ | ||
| 90 | #define HP_SDC_ACT_AFTER 0xe0 | ||
| 91 | #define HP_SDC_ACT_DEAD 0x60 /* Act timed out. */ | ||
| 92 | |||
| 93 | /* Rest of the flags are straightforward representation of the SDC interface */ | ||
| 94 | #define HP_SDC_STATUS_IBF 0x02 /* Input buffer full */ | ||
| 95 | |||
| 96 | #define HP_SDC_STATUS_IRQMASK 0xf0 /* Bits containing "level 1" irq */ | ||
| 97 | #define HP_SDC_STATUS_PERIODIC 0x10 /* Periodic 10ms timer */ | ||
| 98 | #define HP_SDC_STATUS_USERTIMER 0x20 /* "Special purpose" timer */ | ||
| 99 | #define HP_SDC_STATUS_TIMER 0x30 /* Both PERIODIC and USERTIMER */ | ||
| 100 | #define HP_SDC_STATUS_REG 0x40 /* Data from an i8042 register */ | ||
| 101 | #define HP_SDC_STATUS_HILCMD 0x50 /* Command from HIL MLC */ | ||
| 102 | #define HP_SDC_STATUS_HILDATA 0x60 /* Data from HIL MLC */ | ||
| 103 | #define HP_SDC_STATUS_PUP 0x70 /* Sucessful power-up self test */ | ||
| 104 | #define HP_SDC_STATUS_KCOOKED 0x80 /* Key from cooked kbd */ | ||
| 105 | #define HP_SDC_STATUS_KRPG 0xc0 /* Key from Repeat Gen */ | ||
| 106 | #define HP_SDC_STATUS_KMOD_SUP 0x10 /* Shift key is up */ | ||
| 107 | #define HP_SDC_STATUS_KMOD_CUP 0x20 /* Control key is up */ | ||
| 108 | |||
| 109 | #define HP_SDC_NMISTATUS_FHS 0x40 /* NMI is a fast handshake irq */ | ||
| 110 | |||
| 111 | /* Internal i8042 registers (there are more, but they are not too useful). */ | ||
| 112 | |||
| 113 | #define HP_SDC_USE 0x02 /* Resource usage (including OB bit) */ | ||
| 114 | #define HP_SDC_IM 0x04 /* Interrupt mask */ | ||
| 115 | #define HP_SDC_CFG 0x11 /* Configuration register */ | ||
| 116 | #define HP_SDC_KBLANGUAGE 0x12 /* Keyboard language */ | ||
| 117 | |||
| 118 | #define HP_SDC_D0 0x70 /* General purpose data buffer 0 */ | ||
| 119 | #define HP_SDC_D1 0x71 /* General purpose data buffer 1 */ | ||
| 120 | #define HP_SDC_D2 0x72 /* General purpose data buffer 2 */ | ||
| 121 | #define HP_SDC_D3 0x73 /* General purpose data buffer 3 */ | ||
| 122 | #define HP_SDC_VT1 0x74 /* Timer for voice 1 */ | ||
| 123 | #define HP_SDC_VT2 0x75 /* Timer for voice 2 */ | ||
| 124 | #define HP_SDC_VT3 0x76 /* Timer for voice 3 */ | ||
| 125 | #define HP_SDC_VT4 0x77 /* Timer for voice 4 */ | ||
| 126 | #define HP_SDC_KBN 0x78 /* Which HIL devs are Nimitz */ | ||
| 127 | #define HP_SDC_KBC 0x79 /* Which HIL devs are cooked kbds */ | ||
| 128 | #define HP_SDC_LPS 0x7a /* i8042's view of HIL status */ | ||
| 129 | #define HP_SDC_LPC 0x7b /* i8042's view of HIL "control" */ | ||
| 130 | #define HP_SDC_RSV 0x7c /* Reserved "for testing" */ | ||
| 131 | #define HP_SDC_LPR 0x7d /* i8042 count of HIL reconfigs */ | ||
| 132 | #define HP_SDC_XTD 0x7e /* "Extended Configuration" register */ | ||
| 133 | #define HP_SDC_STR 0x7f /* i8042 self-test result */ | ||
| 134 | |||
| 135 | /* Bitfields for above registers */ | ||
| 136 | #define HP_SDC_USE_LOOP 0x04 /* Command is currently on the loop. */ | ||
| 137 | |||
| 138 | #define HP_SDC_IM_MASK 0x1f /* these bits not part of cmd/status */ | ||
| 139 | #define HP_SDC_IM_FH 0x10 /* Mask the fast handshake irq */ | ||
| 140 | #define HP_SDC_IM_PT 0x08 /* Mask the periodic timer irq */ | ||
| 141 | #define HP_SDC_IM_TIMERS 0x04 /* Mask the MT/DT/CT irq */ | ||
| 142 | #define HP_SDC_IM_RESET 0x02 /* Mask the reset key irq */ | ||
| 143 | #define HP_SDC_IM_HIL 0x01 /* Mask the HIL MLC irq */ | ||
| 144 | |||
| 145 | #define HP_SDC_CFG_ROLLOVER 0x08 /* WTF is "N-key rollover"? */ | ||
| 146 | #define HP_SDC_CFG_KBD 0x10 /* There is a keyboard */ | ||
| 147 | #define HP_SDC_CFG_NEW 0x20 /* Supports/uses HIL MLC */ | ||
| 148 | #define HP_SDC_CFG_KBD_OLD 0x03 /* keyboard code for non-HIL */ | ||
| 149 | #define HP_SDC_CFG_KBD_NEW 0x07 /* keyboard code from HIL autoconfig */ | ||
| 150 | #define HP_SDC_CFG_REV 0x40 /* Code revision bit */ | ||
| 151 | #define HP_SDC_CFG_IDPROM 0x80 /* IDPROM present in kbd (not HIL) */ | ||
| 152 | |||
| 153 | #define HP_SDC_LPS_NDEV 0x07 /* # devices autoconfigured on HIL */ | ||
| 154 | #define HP_SDC_LPS_ACSUCC 0x08 /* loop autoconfigured successfully */ | ||
| 155 | #define HP_SDC_LPS_ACFAIL 0x80 /* last loop autoconfigure failed */ | ||
| 156 | |||
| 157 | #define HP_SDC_LPC_APE_IPF 0x01 /* HIL MLC APE/IPF (autopoll) set */ | ||
| 158 | #define HP_SDC_LPC_ARCONERR 0x02 /* i8042 autoreconfigs loop on err */ | ||
| 159 | #define HP_SDC_LPC_ARCQUIET 0x03 /* i8042 doesn't report autoreconfigs*/ | ||
| 160 | #define HP_SDC_LPC_COOK 0x10 /* i8042 cooks devices in _KBN */ | ||
| 161 | #define HP_SDC_LPC_RC 0x80 /* causes autoreconfig */ | ||
| 162 | |||
| 163 | #define HP_SDC_XTD_REV 0x07 /* contains revision code */ | ||
| 164 | #define HP_SDC_XTD_REV_STRINGS(val, str) \ | ||
| 165 | switch (val) { \ | ||
| 166 | case 0x1: str = "1820-3712"; break; \ | ||
| 167 | case 0x2: str = "1820-4379"; break; \ | ||
| 168 | case 0x3: str = "1820-4784"; break; \ | ||
| 169 | default: str = "unknown"; \ | ||
| 170 | }; | ||
| 171 | #define HP_SDC_XTD_BEEPER 0x08 /* TI SN76494 beeper available */ | ||
| 172 | #define HP_SDC_XTD_BBRTC 0x20 /* OKI MSM-58321 BBRTC present */ | ||
| 173 | |||
| 174 | #define HP_SDC_CMD_LOAD_RT 0x31 /* Load real time (from 8042) */ | ||
| 175 | #define HP_SDC_CMD_LOAD_FHS 0x36 /* Load the fast handshake timer */ | ||
| 176 | #define HP_SDC_CMD_LOAD_MT 0x38 /* Load the match timer */ | ||
| 177 | #define HP_SDC_CMD_LOAD_DT 0x3B /* Load the delay timer */ | ||
| 178 | #define HP_SDC_CMD_LOAD_CT 0x3E /* Load the cycle timer */ | ||
| 179 | |||
| 180 | #define HP_SDC_CMD_SET_IM 0x40 /* 010xxxxx == set irq mask */ | ||
| 181 | |||
| 182 | /* The documents provided do not explicitly state that all registers betweem | ||
| 183 | * 0x01 and 0x1f inclusive can be read by sending their register index as a | ||
| 184 | * command, but this is implied and appears to be the case. | ||
| 185 | */ | ||
| 186 | #define HP_SDC_CMD_READ_RAM 0x00 /* Load from i8042 RAM (autoinc) */ | ||
| 187 | #define HP_SDC_CMD_READ_USE 0x02 /* Undocumented! Load from usage reg */ | ||
| 188 | #define HP_SDC_CMD_READ_IM 0x04 /* Load current interrupt mask */ | ||
| 189 | #define HP_SDC_CMD_READ_KCC 0x11 /* Load primary kbd config code */ | ||
| 190 | #define HP_SDC_CMD_READ_KLC 0x12 /* Load primary kbd language code */ | ||
| 191 | #define HP_SDC_CMD_READ_T1 0x13 /* Load timer output buffer byte 1 */ | ||
| 192 | #define HP_SDC_CMD_READ_T2 0x14 /* Load timer output buffer byte 1 */ | ||
| 193 | #define HP_SDC_CMD_READ_T3 0x15 /* Load timer output buffer byte 1 */ | ||
| 194 | #define HP_SDC_CMD_READ_T4 0x16 /* Load timer output buffer byte 1 */ | ||
| 195 | #define HP_SDC_CMD_READ_T5 0x17 /* Load timer output buffer byte 1 */ | ||
| 196 | #define HP_SDC_CMD_READ_D0 0xf0 /* Load from i8042 RAM location 0x70 */ | ||
| 197 | #define HP_SDC_CMD_READ_D1 0xf1 /* Load from i8042 RAM location 0x71 */ | ||
| 198 | #define HP_SDC_CMD_READ_D2 0xf2 /* Load from i8042 RAM location 0x72 */ | ||
| 199 | #define HP_SDC_CMD_READ_D3 0xf3 /* Load from i8042 RAM location 0x73 */ | ||
| 200 | #define HP_SDC_CMD_READ_VT1 0xf4 /* Load from i8042 RAM location 0x74 */ | ||
| 201 | #define HP_SDC_CMD_READ_VT2 0xf5 /* Load from i8042 RAM location 0x75 */ | ||
| 202 | #define HP_SDC_CMD_READ_VT3 0xf6 /* Load from i8042 RAM location 0x76 */ | ||
| 203 | #define HP_SDC_CMD_READ_VT4 0xf7 /* Load from i8042 RAM location 0x77 */ | ||
| 204 | #define HP_SDC_CMD_READ_KBN 0xf8 /* Load from i8042 RAM location 0x78 */ | ||
| 205 | #define HP_SDC_CMD_READ_KBC 0xf9 /* Load from i8042 RAM location 0x79 */ | ||
| 206 | #define HP_SDC_CMD_READ_LPS 0xfa /* Load from i8042 RAM location 0x7a */ | ||
| 207 | #define HP_SDC_CMD_READ_LPC 0xfb /* Load from i8042 RAM location 0x7b */ | ||
| 208 | #define HP_SDC_CMD_READ_RSV 0xfc /* Load from i8042 RAM location 0x7c */ | ||
| 209 | #define HP_SDC_CMD_READ_LPR 0xfd /* Load from i8042 RAM location 0x7d */ | ||
| 210 | #define HP_SDC_CMD_READ_XTD 0xfe /* Load from i8042 RAM location 0x7e */ | ||
| 211 | #define HP_SDC_CMD_READ_STR 0xff /* Load from i8042 RAM location 0x7f */ | ||
| 212 | |||
| 213 | #define HP_SDC_CMD_SET_ARD 0xA0 /* Set emulated autorepeat delay */ | ||
| 214 | #define HP_SDC_CMD_SET_ARR 0xA2 /* Set emulated autorepeat rate */ | ||
| 215 | #define HP_SDC_CMD_SET_BELL 0xA3 /* Set voice 3 params for "beep" cmd */ | ||
| 216 | #define HP_SDC_CMD_SET_RPGR 0xA6 /* Set "RPG" irq rate (doesn't work) */ | ||
| 217 | #define HP_SDC_CMD_SET_RTMS 0xAD /* Set the RTC time (milliseconds) */ | ||
| 218 | #define HP_SDC_CMD_SET_RTD 0xAF /* Set the RTC time (days) */ | ||
| 219 | #define HP_SDC_CMD_SET_FHS 0xB2 /* Set fast handshake timer */ | ||
| 220 | #define HP_SDC_CMD_SET_MT 0xB4 /* Set match timer */ | ||
| 221 | #define HP_SDC_CMD_SET_DT 0xB7 /* Set delay timer */ | ||
| 222 | #define HP_SDC_CMD_SET_CT 0xBA /* Set cycle timer */ | ||
| 223 | #define HP_SDC_CMD_SET_RAMP 0xC1 /* Reset READ_RAM autoinc counter */ | ||
| 224 | #define HP_SDC_CMD_SET_D0 0xe0 /* Load to i8042 RAM location 0x70 */ | ||
| 225 | #define HP_SDC_CMD_SET_D1 0xe1 /* Load to i8042 RAM location 0x71 */ | ||
| 226 | #define HP_SDC_CMD_SET_D2 0xe2 /* Load to i8042 RAM location 0x72 */ | ||
| 227 | #define HP_SDC_CMD_SET_D3 0xe3 /* Load to i8042 RAM location 0x73 */ | ||
| 228 | #define HP_SDC_CMD_SET_VT1 0xe4 /* Load to i8042 RAM location 0x74 */ | ||
| 229 | #define HP_SDC_CMD_SET_VT2 0xe5 /* Load to i8042 RAM location 0x75 */ | ||
| 230 | #define HP_SDC_CMD_SET_VT3 0xe6 /* Load to i8042 RAM location 0x76 */ | ||
| 231 | #define HP_SDC_CMD_SET_VT4 0xe7 /* Load to i8042 RAM location 0x77 */ | ||
| 232 | #define HP_SDC_CMD_SET_KBN 0xe8 /* Load to i8042 RAM location 0x78 */ | ||
| 233 | #define HP_SDC_CMD_SET_KBC 0xe9 /* Load to i8042 RAM location 0x79 */ | ||
| 234 | #define HP_SDC_CMD_SET_LPS 0xea /* Load to i8042 RAM location 0x7a */ | ||
| 235 | #define HP_SDC_CMD_SET_LPC 0xeb /* Load to i8042 RAM location 0x7b */ | ||
| 236 | #define HP_SDC_CMD_SET_RSV 0xec /* Load to i8042 RAM location 0x7c */ | ||
| 237 | #define HP_SDC_CMD_SET_LPR 0xed /* Load to i8042 RAM location 0x7d */ | ||
| 238 | #define HP_SDC_CMD_SET_XTD 0xee /* Load to i8042 RAM location 0x7e */ | ||
| 239 | #define HP_SDC_CMD_SET_STR 0xef /* Load to i8042 RAM location 0x7f */ | ||
| 240 | |||
| 241 | #define HP_SDC_CMD_DO_RTCW 0xc2 /* i8042 RAM 0x70 --> RTC */ | ||
| 242 | #define HP_SDC_CMD_DO_RTCR 0xc3 /* RTC[0x70 0:3] --> irq/status/data */ | ||
| 243 | #define HP_SDC_CMD_DO_BEEP 0xc4 /* i8042 RAM 0x70-74 --> beeper,VT3 */ | ||
| 244 | #define HP_SDC_CMD_DO_HIL 0xc5 /* i8042 RAM 0x70-73 --> | ||
| 245 | HIL MLC R0,R1 i8042 HIL watchdog */ | ||
| 246 | |||
| 247 | /* Values used to (de)mangle input/output to/from the HIL MLC */ | ||
| 248 | #define HP_SDC_DATA 0x40 /* Data from an 8042 register */ | ||
| 249 | #define HP_SDC_HIL_CMD 0x50 /* Data from HIL MLC R1/8042 */ | ||
| 250 | #define HP_SDC_HIL_R1MASK 0x0f /* Contents of HIL MLC R1 0:3 */ | ||
| 251 | #define HP_SDC_HIL_AUTO 0x10 /* Set if POL results from i8042 */ | ||
| 252 | #define HP_SDC_HIL_ISERR 0x80 /* Has meaning as in next 4 values */ | ||
| 253 | #define HP_SDC_HIL_RC_DONE 0x80 /* i8042 auto-configured loop */ | ||
| 254 | #define HP_SDC_HIL_ERR 0x81 /* HIL MLC R2 had a bit set */ | ||
| 255 | #define HP_SDC_HIL_TO 0x82 /* i8042 HIL watchdog expired */ | ||
| 256 | #define HP_SDC_HIL_RC 0x84 /* i8042 is auto-configuring loop */ | ||
| 257 | #define HP_SDC_HIL_DAT 0x60 /* Data from HIL MLC R0 */ | ||
| 258 | |||
| 259 | |||
| 260 | typedef struct { | ||
| 261 | rwlock_t ibf_lock; | ||
| 262 | rwlock_t lock; /* user/tasklet lock */ | ||
| 263 | rwlock_t rtq_lock; /* isr/tasklet lock */ | ||
| 264 | rwlock_t hook_lock; /* isr/user lock for handler add/del */ | ||
| 265 | |||
| 266 | unsigned int irq, nmi; /* Our IRQ lines */ | ||
| 267 | unsigned long base_io, status_io, data_io; /* Our IO ports */ | ||
| 268 | |||
| 269 | uint8_t im; /* Interrupt mask */ | ||
| 270 | int set_im; /* Interrupt mask needs to be set. */ | ||
| 271 | |||
| 272 | int ibf; /* Last known status of IBF flag */ | ||
| 273 | uint8_t wi; /* current i8042 write index */ | ||
| 274 | uint8_t r7[4]; /* current i8042[0x70 - 0x74] values */ | ||
| 275 | uint8_t r11, r7e; /* Values from version/revision regs */ | ||
| 276 | |||
| 277 | hp_sdc_irqhook *timer, *reg, *hil, *pup, *cooked; | ||
| 278 | |||
| 279 | #define HP_SDC_QUEUE_LEN 16 | ||
| 280 | hp_sdc_transaction *tq[HP_SDC_QUEUE_LEN]; /* All pending read/writes */ | ||
| 281 | |||
| 282 | int rcurr, rqty; /* Current read transact in process */ | ||
| 283 | struct timeval rtv; /* Time when current read started */ | ||
| 284 | int wcurr; /* Current write transact in process */ | ||
| 285 | |||
| 286 | int dev_err; /* carries status from registration */ | ||
| 287 | #if defined(__hppa__) | ||
| 288 | struct parisc_device *dev; | ||
| 289 | #elif defined(__mc68000__) | ||
| 290 | void *dev; | ||
| 291 | #else | ||
| 292 | #error No support for device registration on this arch yet. | ||
| 293 | #endif | ||
| 294 | |||
| 295 | struct timer_list kicker; /* Keeps below task alive */ | ||
| 296 | struct tasklet_struct task; | ||
| 297 | |||
| 298 | } hp_i8042_sdc; | ||
| 299 | |||
| 300 | #endif /* _LINUX_HP_SDC_H */ | ||
diff --git a/include/linux/i2c-algo-bit.h b/include/linux/i2c-algo-bit.h index 110904481238..c0e7fab28ce3 100644 --- a/include/linux/i2c-algo-bit.h +++ b/include/linux/i2c-algo-bit.h | |||
| @@ -21,8 +21,6 @@ | |||
| 21 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even | 21 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even |
| 22 | Frodo Looijaard <frodol@dds.nl> */ | 22 | Frodo Looijaard <frodol@dds.nl> */ |
| 23 | 23 | ||
| 24 | /* $Id: i2c-algo-bit.h,v 1.10 2003/01/21 08:08:16 kmalkki Exp $ */ | ||
| 25 | |||
| 26 | #ifndef _LINUX_I2C_ALGO_BIT_H | 24 | #ifndef _LINUX_I2C_ALGO_BIT_H |
| 27 | #define _LINUX_I2C_ALGO_BIT_H | 25 | #define _LINUX_I2C_ALGO_BIT_H |
| 28 | 26 | ||
| @@ -46,8 +44,6 @@ struct i2c_algo_bit_data { | |||
| 46 | int timeout; /* in jiffies */ | 44 | int timeout; /* in jiffies */ |
| 47 | }; | 45 | }; |
| 48 | 46 | ||
| 49 | #define I2C_BIT_ADAP_MAX 16 | ||
| 50 | |||
| 51 | int i2c_bit_add_bus(struct i2c_adapter *); | 47 | int i2c_bit_add_bus(struct i2c_adapter *); |
| 52 | int i2c_bit_del_bus(struct i2c_adapter *); | 48 | int i2c_bit_del_bus(struct i2c_adapter *); |
| 53 | 49 | ||
diff --git a/include/linux/i2c-algo-pca.h b/include/linux/i2c-algo-pca.h index 941b786c5732..226693e0d88b 100644 --- a/include/linux/i2c-algo-pca.h +++ b/include/linux/i2c-algo-pca.h | |||
| @@ -9,8 +9,6 @@ struct i2c_algo_pca_data { | |||
| 9 | int (*wait_for_interrupt) (struct i2c_algo_pca_data *adap); | 9 | int (*wait_for_interrupt) (struct i2c_algo_pca_data *adap); |
| 10 | }; | 10 | }; |
| 11 | 11 | ||
| 12 | #define I2C_PCA_ADAP_MAX 16 | ||
| 13 | |||
| 14 | int i2c_pca_add_bus(struct i2c_adapter *); | 12 | int i2c_pca_add_bus(struct i2c_adapter *); |
| 15 | int i2c_pca_del_bus(struct i2c_adapter *); | 13 | int i2c_pca_del_bus(struct i2c_adapter *); |
| 16 | 14 | ||
diff --git a/include/linux/i2c-algo-pcf.h b/include/linux/i2c-algo-pcf.h index 2a508562255f..18b0adf57a3d 100644 --- a/include/linux/i2c-algo-pcf.h +++ b/include/linux/i2c-algo-pcf.h | |||
| @@ -22,8 +22,6 @@ | |||
| 22 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even | 22 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even |
| 23 | Frodo Looijaard <frodol@dds.nl> */ | 23 | Frodo Looijaard <frodol@dds.nl> */ |
| 24 | 24 | ||
| 25 | /* $Id: i2c-algo-pcf.h,v 1.8 2003/01/21 08:08:16 kmalkki Exp $ */ | ||
| 26 | |||
| 27 | #ifndef _LINUX_I2C_ALGO_PCF_H | 25 | #ifndef _LINUX_I2C_ALGO_PCF_H |
| 28 | #define _LINUX_I2C_ALGO_PCF_H | 26 | #define _LINUX_I2C_ALGO_PCF_H |
| 29 | 27 | ||
| @@ -41,8 +39,6 @@ struct i2c_algo_pcf_data { | |||
| 41 | int timeout; | 39 | int timeout; |
| 42 | }; | 40 | }; |
| 43 | 41 | ||
| 44 | #define I2C_PCF_ADAP_MAX 16 | ||
| 45 | |||
| 46 | int i2c_pcf_add_bus(struct i2c_adapter *); | 42 | int i2c_pcf_add_bus(struct i2c_adapter *); |
| 47 | int i2c_pcf_del_bus(struct i2c_adapter *); | 43 | int i2c_pcf_del_bus(struct i2c_adapter *); |
| 48 | 44 | ||
diff --git a/include/linux/i2c-dev.h b/include/linux/i2c-dev.h index 541695679762..81c229a0fbca 100644 --- a/include/linux/i2c-dev.h +++ b/include/linux/i2c-dev.h | |||
| @@ -19,8 +19,6 @@ | |||
| 19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | /* $Id: i2c-dev.h,v 1.13 2003/01/21 08:08:16 kmalkki Exp $ */ | ||
| 23 | |||
| 24 | #ifndef _LINUX_I2C_DEV_H | 22 | #ifndef _LINUX_I2C_DEV_H |
| 25 | #define _LINUX_I2C_DEV_H | 23 | #define _LINUX_I2C_DEV_H |
| 26 | 24 | ||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 44f30876a1c9..1ce4b54caa21 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
| @@ -164,10 +164,7 @@ | |||
| 164 | 164 | ||
| 165 | /* --- Bit algorithm adapters */ | 165 | /* --- Bit algorithm adapters */ |
| 166 | #define I2C_HW_B_LP 0x010000 /* Parallel port Philips style */ | 166 | #define I2C_HW_B_LP 0x010000 /* Parallel port Philips style */ |
| 167 | #define I2C_HW_B_LPC 0x010001 /* Parallel port control reg. */ | ||
| 168 | #define I2C_HW_B_SER 0x010002 /* Serial line interface */ | 167 | #define I2C_HW_B_SER 0x010002 /* Serial line interface */ |
| 169 | #define I2C_HW_B_ELV 0x010003 /* ELV Card */ | ||
| 170 | #define I2C_HW_B_VELLE 0x010004 /* Vellemann K8000 */ | ||
| 171 | #define I2C_HW_B_BT848 0x010005 /* BT848 video boards */ | 168 | #define I2C_HW_B_BT848 0x010005 /* BT848 video boards */ |
| 172 | #define I2C_HW_B_WNV 0x010006 /* Winnov Videums */ | 169 | #define I2C_HW_B_WNV 0x010006 /* Winnov Videums */ |
| 173 | #define I2C_HW_B_VIA 0x010007 /* Via vt82c586b */ | 170 | #define I2C_HW_B_VIA 0x010007 /* Via vt82c586b */ |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 3d49a305bf88..f88577ca3b3a 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
| @@ -23,14 +23,13 @@ | |||
| 23 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and | 23 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and |
| 24 | Frodo Looijaard <frodol@dds.nl> */ | 24 | Frodo Looijaard <frodol@dds.nl> */ |
| 25 | 25 | ||
| 26 | /* $Id: i2c.h,v 1.68 2003/01/21 08:08:16 kmalkki Exp $ */ | ||
| 27 | |||
| 28 | #ifndef _LINUX_I2C_H | 26 | #ifndef _LINUX_I2C_H |
| 29 | #define _LINUX_I2C_H | 27 | #define _LINUX_I2C_H |
| 30 | 28 | ||
| 31 | #include <linux/module.h> | 29 | #include <linux/module.h> |
| 32 | #include <linux/types.h> | 30 | #include <linux/types.h> |
| 33 | #include <linux/i2c-id.h> | 31 | #include <linux/i2c-id.h> |
| 32 | #include <linux/mod_devicetable.h> | ||
| 34 | #include <linux/device.h> /* for struct device */ | 33 | #include <linux/device.h> /* for struct device */ |
| 35 | #include <asm/semaphore.h> | 34 | #include <asm/semaphore.h> |
| 36 | 35 | ||
| @@ -94,10 +93,10 @@ extern s32 i2c_smbus_write_byte_data(struct i2c_client * client, | |||
| 94 | extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command); | 93 | extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command); |
| 95 | extern s32 i2c_smbus_write_word_data(struct i2c_client * client, | 94 | extern s32 i2c_smbus_write_word_data(struct i2c_client * client, |
| 96 | u8 command, u16 value); | 95 | u8 command, u16 value); |
| 97 | /* Returns the number of bytes transferred */ | ||
| 98 | extern s32 i2c_smbus_write_block_data(struct i2c_client * client, | 96 | extern s32 i2c_smbus_write_block_data(struct i2c_client * client, |
| 99 | u8 command, u8 length, | 97 | u8 command, u8 length, |
| 100 | u8 *values); | 98 | u8 *values); |
| 99 | /* Returns the number of read bytes */ | ||
| 101 | extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client, | 100 | extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client, |
| 102 | u8 command, u8 *values); | 101 | u8 command, u8 *values); |
| 103 | 102 | ||
| @@ -391,10 +390,6 @@ struct i2c_msg { | |||
| 391 | #define I2C_FUNC_10BIT_ADDR 0x00000002 | 390 | #define I2C_FUNC_10BIT_ADDR 0x00000002 |
| 392 | #define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */ | 391 | #define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */ |
| 393 | #define I2C_FUNC_SMBUS_HWPEC_CALC 0x00000008 /* SMBus 2.0 */ | 392 | #define I2C_FUNC_SMBUS_HWPEC_CALC 0x00000008 /* SMBus 2.0 */ |
| 394 | #define I2C_FUNC_SMBUS_READ_WORD_DATA_PEC 0x00000800 /* SMBus 2.0 */ | ||
| 395 | #define I2C_FUNC_SMBUS_WRITE_WORD_DATA_PEC 0x00001000 /* SMBus 2.0 */ | ||
| 396 | #define I2C_FUNC_SMBUS_PROC_CALL_PEC 0x00002000 /* SMBus 2.0 */ | ||
| 397 | #define I2C_FUNC_SMBUS_BLOCK_PROC_CALL_PEC 0x00004000 /* SMBus 2.0 */ | ||
| 398 | #define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */ | 393 | #define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */ |
| 399 | #define I2C_FUNC_SMBUS_QUICK 0x00010000 | 394 | #define I2C_FUNC_SMBUS_QUICK 0x00010000 |
| 400 | #define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 | 395 | #define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 |
| @@ -410,8 +405,6 @@ struct i2c_msg { | |||
| 410 | #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */ | 405 | #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */ |
| 411 | #define I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 0x10000000 /* I2C-like block xfer */ | 406 | #define I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 0x10000000 /* I2C-like block xfer */ |
| 412 | #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 0x20000000 /* w/ 2-byte reg. addr. */ | 407 | #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 0x20000000 /* w/ 2-byte reg. addr. */ |
| 413 | #define I2C_FUNC_SMBUS_READ_BLOCK_DATA_PEC 0x40000000 /* SMBus 2.0 */ | ||
| 414 | #define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC 0x80000000 /* SMBus 2.0 */ | ||
| 415 | 408 | ||
| 416 | #define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \ | 409 | #define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \ |
| 417 | I2C_FUNC_SMBUS_WRITE_BYTE) | 410 | I2C_FUNC_SMBUS_WRITE_BYTE) |
| @@ -425,17 +418,6 @@ struct i2c_msg { | |||
| 425 | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK) | 418 | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK) |
| 426 | #define I2C_FUNC_SMBUS_I2C_BLOCK_2 (I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 | \ | 419 | #define I2C_FUNC_SMBUS_I2C_BLOCK_2 (I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 | \ |
| 427 | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2) | 420 | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2) |
| 428 | #define I2C_FUNC_SMBUS_BLOCK_DATA_PEC (I2C_FUNC_SMBUS_READ_BLOCK_DATA_PEC | \ | ||
| 429 | I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC) | ||
| 430 | #define I2C_FUNC_SMBUS_WORD_DATA_PEC (I2C_FUNC_SMBUS_READ_WORD_DATA_PEC | \ | ||
| 431 | I2C_FUNC_SMBUS_WRITE_WORD_DATA_PEC) | ||
| 432 | |||
| 433 | #define I2C_FUNC_SMBUS_READ_BYTE_PEC I2C_FUNC_SMBUS_READ_BYTE_DATA | ||
| 434 | #define I2C_FUNC_SMBUS_WRITE_BYTE_PEC I2C_FUNC_SMBUS_WRITE_BYTE_DATA | ||
| 435 | #define I2C_FUNC_SMBUS_READ_BYTE_DATA_PEC I2C_FUNC_SMBUS_READ_WORD_DATA | ||
| 436 | #define I2C_FUNC_SMBUS_WRITE_BYTE_DATA_PEC I2C_FUNC_SMBUS_WRITE_WORD_DATA | ||
| 437 | #define I2C_FUNC_SMBUS_BYTE_PEC I2C_FUNC_SMBUS_BYTE_DATA | ||
| 438 | #define I2C_FUNC_SMBUS_BYTE_DATA_PEC I2C_FUNC_SMBUS_WORD_DATA | ||
| 439 | 421 | ||
| 440 | #define I2C_FUNC_SMBUS_EMUL (I2C_FUNC_SMBUS_QUICK | \ | 422 | #define I2C_FUNC_SMBUS_EMUL (I2C_FUNC_SMBUS_QUICK | \ |
| 441 | I2C_FUNC_SMBUS_BYTE | \ | 423 | I2C_FUNC_SMBUS_BYTE | \ |
| @@ -443,20 +425,17 @@ struct i2c_msg { | |||
| 443 | I2C_FUNC_SMBUS_WORD_DATA | \ | 425 | I2C_FUNC_SMBUS_WORD_DATA | \ |
| 444 | I2C_FUNC_SMBUS_PROC_CALL | \ | 426 | I2C_FUNC_SMBUS_PROC_CALL | \ |
| 445 | I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \ | 427 | I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \ |
| 446 | I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC | \ | ||
| 447 | I2C_FUNC_SMBUS_I2C_BLOCK) | 428 | I2C_FUNC_SMBUS_I2C_BLOCK) |
| 448 | 429 | ||
| 449 | /* | 430 | /* |
| 450 | * Data for SMBus Messages | 431 | * Data for SMBus Messages |
| 451 | */ | 432 | */ |
| 452 | #define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */ | 433 | #define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */ |
| 453 | #define I2C_SMBUS_I2C_BLOCK_MAX 32 /* Not specified but we use same structure */ | ||
| 454 | union i2c_smbus_data { | 434 | union i2c_smbus_data { |
| 455 | __u8 byte; | 435 | __u8 byte; |
| 456 | __u16 word; | 436 | __u16 word; |
| 457 | __u8 block[I2C_SMBUS_BLOCK_MAX + 3]; /* block[0] is used for length */ | 437 | __u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */ |
| 458 | /* one more for read length in block process call */ | 438 | /* and one more for user-space compatibility */ |
| 459 | /* and one more for PEC */ | ||
| 460 | }; | 439 | }; |
| 461 | 440 | ||
| 462 | /* smbus_access read or write markers */ | 441 | /* smbus_access read or write markers */ |
| @@ -473,10 +452,6 @@ union i2c_smbus_data { | |||
| 473 | #define I2C_SMBUS_BLOCK_DATA 5 | 452 | #define I2C_SMBUS_BLOCK_DATA 5 |
| 474 | #define I2C_SMBUS_I2C_BLOCK_DATA 6 | 453 | #define I2C_SMBUS_I2C_BLOCK_DATA 6 |
| 475 | #define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */ | 454 | #define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */ |
| 476 | #define I2C_SMBUS_BLOCK_DATA_PEC 8 /* SMBus 2.0 */ | ||
| 477 | #define I2C_SMBUS_PROC_CALL_PEC 9 /* SMBus 2.0 */ | ||
| 478 | #define I2C_SMBUS_BLOCK_PROC_CALL_PEC 10 /* SMBus 2.0 */ | ||
| 479 | #define I2C_SMBUS_WORD_DATA_PEC 11 /* SMBus 2.0 */ | ||
| 480 | 455 | ||
| 481 | 456 | ||
| 482 | /* ----- commands for the ioctl like i2c_command call: | 457 | /* ----- commands for the ioctl like i2c_command call: |
| @@ -506,11 +481,6 @@ union i2c_smbus_data { | |||
| 506 | 481 | ||
| 507 | #define I2C_SMBUS 0x0720 /* SMBus-level access */ | 482 | #define I2C_SMBUS 0x0720 /* SMBus-level access */ |
| 508 | 483 | ||
| 509 | /* ... algo-bit.c recognizes */ | ||
| 510 | #define I2C_UDELAY 0x0705 /* set delay in microsecs between each */ | ||
| 511 | /* written byte (except address) */ | ||
| 512 | #define I2C_MDELAY 0x0706 /* millisec delay between written bytes */ | ||
| 513 | |||
| 514 | /* ----- I2C-DEV: char device interface stuff ------------------------- */ | 484 | /* ----- I2C-DEV: char device interface stuff ------------------------- */ |
| 515 | 485 | ||
| 516 | #define I2C_MAJOR 89 /* Device major number */ | 486 | #define I2C_MAJOR 89 /* Device major number */ |
diff --git a/include/linux/i2o.h b/include/linux/i2o.h index bdc286ec947c..92300325dbcd 100644 --- a/include/linux/i2o.h +++ b/include/linux/i2o.h | |||
| @@ -66,8 +66,6 @@ struct i2o_device { | |||
| 66 | struct device device; | 66 | struct device device; |
| 67 | 67 | ||
| 68 | struct semaphore lock; /* device lock */ | 68 | struct semaphore lock; /* device lock */ |
| 69 | |||
| 70 | struct class_device classdev; /* i2o device class */ | ||
| 71 | }; | 69 | }; |
| 72 | 70 | ||
| 73 | /* | 71 | /* |
| @@ -194,7 +192,7 @@ struct i2o_controller { | |||
| 194 | struct resource mem_resource; /* Mem resource allocated to the IOP */ | 192 | struct resource mem_resource; /* Mem resource allocated to the IOP */ |
| 195 | 193 | ||
| 196 | struct device device; | 194 | struct device device; |
| 197 | struct class_device classdev; /* I2O controller class */ | 195 | struct class_device *classdev; /* I2O controller class device */ |
| 198 | struct i2o_device *exec; /* Executive */ | 196 | struct i2o_device *exec; /* Executive */ |
| 199 | #if BITS_PER_LONG == 64 | 197 | #if BITS_PER_LONG == 64 |
| 200 | spinlock_t context_list_lock; /* lock for context_list */ | 198 | spinlock_t context_list_lock; /* lock for context_list */ |
| @@ -492,7 +490,7 @@ static inline int i2o_dma_map_sg(struct i2o_controller *c, | |||
| 492 | * Returns 0 on success or -ENOMEM on failure. | 490 | * Returns 0 on success or -ENOMEM on failure. |
| 493 | */ | 491 | */ |
| 494 | static inline int i2o_dma_alloc(struct device *dev, struct i2o_dma *addr, | 492 | static inline int i2o_dma_alloc(struct device *dev, struct i2o_dma *addr, |
| 495 | size_t len, unsigned int gfp_mask) | 493 | size_t len, gfp_t gfp_mask) |
| 496 | { | 494 | { |
| 497 | struct pci_dev *pdev = to_pci_dev(dev); | 495 | struct pci_dev *pdev = to_pci_dev(dev); |
| 498 | int dma_64 = 0; | 496 | int dma_64 = 0; |
| @@ -551,7 +549,7 @@ static inline void i2o_dma_free(struct device *dev, struct i2o_dma *addr) | |||
| 551 | * Returns the 0 on success or negative error code on failure. | 549 | * Returns the 0 on success or negative error code on failure. |
| 552 | */ | 550 | */ |
| 553 | static inline int i2o_dma_realloc(struct device *dev, struct i2o_dma *addr, | 551 | static inline int i2o_dma_realloc(struct device *dev, struct i2o_dma *addr, |
| 554 | size_t len, unsigned int gfp_mask) | 552 | size_t len, gfp_t gfp_mask) |
| 555 | { | 553 | { |
| 556 | i2o_dma_free(dev, addr); | 554 | i2o_dma_free(dev, addr); |
| 557 | 555 | ||
diff --git a/include/linux/ibmtr.h b/include/linux/ibmtr.h index 2ef0b21517fb..1c7a0dd5536a 100644 --- a/include/linux/ibmtr.h +++ b/include/linux/ibmtr.h | |||
| @@ -7,8 +7,8 @@ | |||
| 7 | /* ported to the Alpha architecture 02/20/96 (just used the HZ macro) */ | 7 | /* ported to the Alpha architecture 02/20/96 (just used the HZ macro) */ |
| 8 | 8 | ||
| 9 | #define TR_RETRY_INTERVAL (30*HZ) /* 500 on PC = 5 s */ | 9 | #define TR_RETRY_INTERVAL (30*HZ) /* 500 on PC = 5 s */ |
| 10 | #define TR_RST_TIME (HZ/20) /* 5 on PC = 50 ms */ | 10 | #define TR_RST_TIME (msecs_to_jiffies(50)) /* 5 on PC = 50 ms */ |
| 11 | #define TR_BUSY_INTERVAL (HZ/5) /* 5 on PC = 200 ms */ | 11 | #define TR_BUSY_INTERVAL (msecs_to_jiffies(200)) /* 5 on PC = 200 ms */ |
| 12 | #define TR_SPIN_INTERVAL (3*HZ) /* 3 seconds before init timeout */ | 12 | #define TR_SPIN_INTERVAL (3*HZ) /* 3 seconds before init timeout */ |
| 13 | 13 | ||
| 14 | #define TR_ISA 1 | 14 | #define TR_ISA 1 |
diff --git a/include/linux/idr.h b/include/linux/idr.h index 3d5de45f961b..7fb3ff9c7b0e 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
| @@ -71,7 +71,7 @@ struct idr { | |||
| 71 | */ | 71 | */ |
| 72 | 72 | ||
| 73 | void *idr_find(struct idr *idp, int id); | 73 | void *idr_find(struct idr *idp, int id); |
| 74 | int idr_pre_get(struct idr *idp, unsigned gfp_mask); | 74 | int idr_pre_get(struct idr *idp, gfp_t gfp_mask); |
| 75 | int idr_get_new(struct idr *idp, void *ptr, int *id); | 75 | int idr_get_new(struct idr *idp, void *ptr, int *id); |
| 76 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); | 76 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); |
| 77 | void idr_remove(struct idr *idp, int id); | 77 | void idr_remove(struct idr *idp, int id); |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index 0856548a2a08..a8b1a2071838 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
| @@ -84,6 +84,7 @@ | |||
| 84 | #define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */ | 84 | #define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */ |
| 85 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ | 85 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ |
| 86 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 86 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
| 87 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | ||
| 87 | 88 | ||
| 88 | #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */ | 89 | #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */ |
| 89 | #define ARPHRD_NONE 0xFFFE /* zero header length */ | 90 | #define ARPHRD_NONE 0xFFFE /* zero header length */ |
diff --git a/include/linux/input.h b/include/linux/input.h index e8c296ff6257..f623c745c21c 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #ifdef __KERNEL__ | 12 | #ifdef __KERNEL__ |
| 13 | #include <linux/time.h> | 13 | #include <linux/time.h> |
| 14 | #include <linux/list.h> | 14 | #include <linux/list.h> |
| 15 | #include <linux/device.h> | ||
| 15 | #else | 16 | #else |
| 16 | #include <sys/time.h> | 17 | #include <sys/time.h> |
| 17 | #include <sys/ioctl.h> | 18 | #include <sys/ioctl.h> |
| @@ -644,6 +645,7 @@ struct input_absinfo { | |||
| 644 | #define BUS_ADB 0x17 | 645 | #define BUS_ADB 0x17 |
| 645 | #define BUS_I2C 0x18 | 646 | #define BUS_I2C 0x18 |
| 646 | #define BUS_HOST 0x19 | 647 | #define BUS_HOST 0x19 |
| 648 | #define BUS_GSC 0x1A | ||
| 647 | 649 | ||
| 648 | /* | 650 | /* |
| 649 | * Values describing the status of an effect | 651 | * Values describing the status of an effect |
| @@ -889,11 +891,15 @@ struct input_dev { | |||
| 889 | struct semaphore sem; /* serializes open and close operations */ | 891 | struct semaphore sem; /* serializes open and close operations */ |
| 890 | unsigned int users; | 892 | unsigned int users; |
| 891 | 893 | ||
| 892 | struct device *dev; | 894 | struct class_device cdev; |
| 895 | struct device *dev; /* will be removed soon */ | ||
| 896 | |||
| 897 | int dynalloc; /* temporarily */ | ||
| 893 | 898 | ||
| 894 | struct list_head h_list; | 899 | struct list_head h_list; |
| 895 | struct list_head node; | 900 | struct list_head node; |
| 896 | }; | 901 | }; |
| 902 | #define to_input_dev(d) container_of(d, struct input_dev, cdev) | ||
| 897 | 903 | ||
| 898 | /* | 904 | /* |
| 899 | * Structure for hotplug & device<->driver matching. | 905 | * Structure for hotplug & device<->driver matching. |
| @@ -984,6 +990,23 @@ static inline void init_input_dev(struct input_dev *dev) | |||
| 984 | INIT_LIST_HEAD(&dev->node); | 990 | INIT_LIST_HEAD(&dev->node); |
| 985 | } | 991 | } |
| 986 | 992 | ||
| 993 | struct input_dev *input_allocate_device(void); | ||
| 994 | |||
| 995 | static inline void input_free_device(struct input_dev *dev) | ||
| 996 | { | ||
| 997 | kfree(dev); | ||
| 998 | } | ||
| 999 | |||
| 1000 | static inline struct input_dev *input_get_device(struct input_dev *dev) | ||
| 1001 | { | ||
| 1002 | return to_input_dev(class_device_get(&dev->cdev)); | ||
| 1003 | } | ||
| 1004 | |||
| 1005 | static inline void input_put_device(struct input_dev *dev) | ||
| 1006 | { | ||
| 1007 | class_device_put(&dev->cdev); | ||
| 1008 | } | ||
| 1009 | |||
| 987 | void input_register_device(struct input_dev *); | 1010 | void input_register_device(struct input_dev *); |
| 988 | void input_unregister_device(struct input_dev *); | 1011 | void input_unregister_device(struct input_dev *); |
| 989 | 1012 | ||
| @@ -1052,7 +1075,7 @@ static inline void input_set_abs_params(struct input_dev *dev, int axis, int min | |||
| 1052 | dev->absbit[LONG(axis)] |= BIT(axis); | 1075 | dev->absbit[LONG(axis)] |= BIT(axis); |
| 1053 | } | 1076 | } |
| 1054 | 1077 | ||
| 1055 | extern struct class *input_class; | 1078 | extern struct class input_class; |
| 1056 | 1079 | ||
| 1057 | #endif | 1080 | #endif |
| 1058 | #endif | 1081 | #endif |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index ff853b3173c6..be197eb90077 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
| @@ -69,7 +69,7 @@ extern int journal_enable_debug; | |||
| 69 | #define jbd_debug(f, a...) /**/ | 69 | #define jbd_debug(f, a...) /**/ |
| 70 | #endif | 70 | #endif |
| 71 | 71 | ||
| 72 | extern void * __jbd_kmalloc (const char *where, size_t size, int flags, int retry); | 72 | extern void * __jbd_kmalloc (const char *where, size_t size, gfp_t flags, int retry); |
| 73 | #define jbd_kmalloc(size, flags) \ | 73 | #define jbd_kmalloc(size, flags) \ |
| 74 | __jbd_kmalloc(__FUNCTION__, (size), (flags), journal_oom_retry) | 74 | __jbd_kmalloc(__FUNCTION__, (size), (flags), journal_oom_retry) |
| 75 | #define jbd_rep_kmalloc(size, flags) \ | 75 | #define jbd_rep_kmalloc(size, flags) \ |
| @@ -890,7 +890,7 @@ extern int journal_forget (handle_t *, struct buffer_head *); | |||
| 890 | extern void journal_sync_buffer (struct buffer_head *); | 890 | extern void journal_sync_buffer (struct buffer_head *); |
| 891 | extern int journal_invalidatepage(journal_t *, | 891 | extern int journal_invalidatepage(journal_t *, |
| 892 | struct page *, unsigned long); | 892 | struct page *, unsigned long); |
| 893 | extern int journal_try_to_free_buffers(journal_t *, struct page *, int); | 893 | extern int journal_try_to_free_buffers(journal_t *, struct page *, gfp_t); |
| 894 | extern int journal_stop(handle_t *); | 894 | extern int journal_stop(handle_t *); |
| 895 | extern int journal_flush (journal_t *); | 895 | extern int journal_flush (journal_t *); |
| 896 | extern void journal_lock_updates (journal_t *); | 896 | extern void journal_lock_updates (journal_t *); |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 3b22304f12fd..7f7403aa4a41 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
| @@ -65,7 +65,7 @@ extern void kobject_unregister(struct kobject *); | |||
| 65 | extern struct kobject * kobject_get(struct kobject *); | 65 | extern struct kobject * kobject_get(struct kobject *); |
| 66 | extern void kobject_put(struct kobject *); | 66 | extern void kobject_put(struct kobject *); |
| 67 | 67 | ||
| 68 | extern char * kobject_get_path(struct kobject *, int); | 68 | extern char * kobject_get_path(struct kobject *, gfp_t); |
| 69 | 69 | ||
| 70 | struct kobj_type { | 70 | struct kobj_type { |
| 71 | void (*release)(struct kobject *); | 71 | void (*release)(struct kobject *); |
diff --git a/include/linux/libata.h b/include/linux/libata.h index ceee1fc42c60..00a8a5738858 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -91,12 +91,13 @@ enum { | |||
| 91 | ATA_SHT_EMULATED = 1, | 91 | ATA_SHT_EMULATED = 1, |
| 92 | ATA_SHT_CMD_PER_LUN = 1, | 92 | ATA_SHT_CMD_PER_LUN = 1, |
| 93 | ATA_SHT_THIS_ID = -1, | 93 | ATA_SHT_THIS_ID = -1, |
| 94 | ATA_SHT_USE_CLUSTERING = 0, | 94 | ATA_SHT_USE_CLUSTERING = 1, |
| 95 | 95 | ||
| 96 | /* struct ata_device stuff */ | 96 | /* struct ata_device stuff */ |
| 97 | ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */ | 97 | ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */ |
| 98 | ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */ | 98 | ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */ |
| 99 | ATA_DFLAG_LOCK_SECTORS = (1 << 2), /* don't adjust max_sectors */ | 99 | ATA_DFLAG_LOCK_SECTORS = (1 << 2), /* don't adjust max_sectors */ |
| 100 | ATA_DFLAG_LBA = (1 << 3), /* device supports LBA */ | ||
| 100 | 101 | ||
| 101 | ATA_DEV_UNKNOWN = 0, /* unknown device */ | 102 | ATA_DEV_UNKNOWN = 0, /* unknown device */ |
| 102 | ATA_DEV_ATA = 1, /* ATA device */ | 103 | ATA_DEV_ATA = 1, /* ATA device */ |
| @@ -154,17 +155,21 @@ enum { | |||
| 154 | ATA_SHIFT_UDMA = 0, | 155 | ATA_SHIFT_UDMA = 0, |
| 155 | ATA_SHIFT_MWDMA = 8, | 156 | ATA_SHIFT_MWDMA = 8, |
| 156 | ATA_SHIFT_PIO = 11, | 157 | ATA_SHIFT_PIO = 11, |
| 158 | |||
| 159 | /* Masks for port functions */ | ||
| 160 | ATA_PORT_PRIMARY = (1 << 0), | ||
| 161 | ATA_PORT_SECONDARY = (1 << 1), | ||
| 157 | }; | 162 | }; |
| 158 | 163 | ||
| 159 | enum pio_task_states { | 164 | enum hsm_task_states { |
| 160 | PIO_ST_UNKNOWN, | 165 | HSM_ST_UNKNOWN, |
| 161 | PIO_ST_IDLE, | 166 | HSM_ST_IDLE, |
| 162 | PIO_ST_POLL, | 167 | HSM_ST_POLL, |
| 163 | PIO_ST_TMOUT, | 168 | HSM_ST_TMOUT, |
| 164 | PIO_ST, | 169 | HSM_ST, |
| 165 | PIO_ST_LAST, | 170 | HSM_ST_LAST, |
| 166 | PIO_ST_LAST_POLL, | 171 | HSM_ST_LAST_POLL, |
| 167 | PIO_ST_ERR, | 172 | HSM_ST_ERR, |
| 168 | }; | 173 | }; |
| 169 | 174 | ||
| 170 | /* forward declarations */ | 175 | /* forward declarations */ |
| @@ -197,7 +202,7 @@ struct ata_ioports { | |||
| 197 | struct ata_probe_ent { | 202 | struct ata_probe_ent { |
| 198 | struct list_head node; | 203 | struct list_head node; |
| 199 | struct device *dev; | 204 | struct device *dev; |
| 200 | struct ata_port_operations *port_ops; | 205 | const struct ata_port_operations *port_ops; |
| 201 | Scsi_Host_Template *sht; | 206 | Scsi_Host_Template *sht; |
| 202 | struct ata_ioports port[ATA_MAX_PORTS]; | 207 | struct ata_ioports port[ATA_MAX_PORTS]; |
| 203 | unsigned int n_ports; | 208 | unsigned int n_ports; |
| @@ -220,7 +225,7 @@ struct ata_host_set { | |||
| 220 | void __iomem *mmio_base; | 225 | void __iomem *mmio_base; |
| 221 | unsigned int n_ports; | 226 | unsigned int n_ports; |
| 222 | void *private_data; | 227 | void *private_data; |
| 223 | struct ata_port_operations *ops; | 228 | const struct ata_port_operations *ops; |
| 224 | struct ata_port * ports[0]; | 229 | struct ata_port * ports[0]; |
| 225 | }; | 230 | }; |
| 226 | 231 | ||
| @@ -278,15 +283,18 @@ struct ata_device { | |||
| 278 | u8 xfer_mode; | 283 | u8 xfer_mode; |
| 279 | unsigned int xfer_shift; /* ATA_SHIFT_xxx */ | 284 | unsigned int xfer_shift; /* ATA_SHIFT_xxx */ |
| 280 | 285 | ||
| 281 | /* cache info about current transfer mode */ | 286 | unsigned int multi_count; /* sectors count for |
| 282 | u8 xfer_protocol; /* taskfile xfer protocol */ | 287 | READ/WRITE MULTIPLE */ |
| 283 | u8 read_cmd; /* opcode to use on read */ | 288 | |
| 284 | u8 write_cmd; /* opcode to use on write */ | 289 | /* for CHS addressing */ |
| 290 | u16 cylinders; /* Number of cylinders */ | ||
| 291 | u16 heads; /* Number of heads */ | ||
| 292 | u16 sectors; /* Number of sectors per track */ | ||
| 285 | }; | 293 | }; |
| 286 | 294 | ||
| 287 | struct ata_port { | 295 | struct ata_port { |
| 288 | struct Scsi_Host *host; /* our co-allocated scsi host */ | 296 | struct Scsi_Host *host; /* our co-allocated scsi host */ |
| 289 | struct ata_port_operations *ops; | 297 | const struct ata_port_operations *ops; |
| 290 | unsigned long flags; /* ATA_FLAG_xxx */ | 298 | unsigned long flags; /* ATA_FLAG_xxx */ |
| 291 | unsigned int id; /* unique id req'd by scsi midlyr */ | 299 | unsigned int id; /* unique id req'd by scsi midlyr */ |
| 292 | unsigned int port_no; /* unique port #; from zero */ | 300 | unsigned int port_no; /* unique port #; from zero */ |
| @@ -319,7 +327,7 @@ struct ata_port { | |||
| 319 | struct work_struct packet_task; | 327 | struct work_struct packet_task; |
| 320 | 328 | ||
| 321 | struct work_struct pio_task; | 329 | struct work_struct pio_task; |
| 322 | unsigned int pio_task_state; | 330 | unsigned int hsm_task_state; |
| 323 | unsigned long pio_task_timeout; | 331 | unsigned long pio_task_timeout; |
| 324 | 332 | ||
| 325 | void *private_data; | 333 | void *private_data; |
| @@ -333,10 +341,10 @@ struct ata_port_operations { | |||
| 333 | void (*set_piomode) (struct ata_port *, struct ata_device *); | 341 | void (*set_piomode) (struct ata_port *, struct ata_device *); |
| 334 | void (*set_dmamode) (struct ata_port *, struct ata_device *); | 342 | void (*set_dmamode) (struct ata_port *, struct ata_device *); |
| 335 | 343 | ||
| 336 | void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf); | 344 | void (*tf_load) (struct ata_port *ap, const struct ata_taskfile *tf); |
| 337 | void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); | 345 | void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); |
| 338 | 346 | ||
| 339 | void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); | 347 | void (*exec_command)(struct ata_port *ap, const struct ata_taskfile *tf); |
| 340 | u8 (*check_status)(struct ata_port *ap); | 348 | u8 (*check_status)(struct ata_port *ap); |
| 341 | u8 (*check_altstatus)(struct ata_port *ap); | 349 | u8 (*check_altstatus)(struct ata_port *ap); |
| 342 | u8 (*check_err)(struct ata_port *ap); | 350 | u8 (*check_err)(struct ata_port *ap); |
| @@ -377,9 +385,22 @@ struct ata_port_info { | |||
| 377 | unsigned long pio_mask; | 385 | unsigned long pio_mask; |
| 378 | unsigned long mwdma_mask; | 386 | unsigned long mwdma_mask; |
| 379 | unsigned long udma_mask; | 387 | unsigned long udma_mask; |
| 380 | struct ata_port_operations *port_ops; | 388 | const struct ata_port_operations *port_ops; |
| 389 | }; | ||
| 390 | |||
| 391 | struct ata_timing { | ||
| 392 | unsigned short mode; /* ATA mode */ | ||
| 393 | unsigned short setup; /* t1 */ | ||
| 394 | unsigned short act8b; /* t2 for 8-bit I/O */ | ||
| 395 | unsigned short rec8b; /* t2i for 8-bit I/O */ | ||
| 396 | unsigned short cyc8b; /* t0 for 8-bit I/O */ | ||
| 397 | unsigned short active; /* t2 or tD */ | ||
| 398 | unsigned short recover; /* t2i or tK */ | ||
| 399 | unsigned short cycle; /* t0 */ | ||
| 400 | unsigned short udma; /* t2CYCTYP/2 */ | ||
| 381 | }; | 401 | }; |
| 382 | 402 | ||
| 403 | #define FIT(v,vmin,vmax) max_t(short,min_t(short,v,vmax),vmin) | ||
| 383 | 404 | ||
| 384 | extern void ata_port_probe(struct ata_port *); | 405 | extern void ata_port_probe(struct ata_port *); |
| 385 | extern void __sata_phy_reset(struct ata_port *ap); | 406 | extern void __sata_phy_reset(struct ata_port *ap); |
| @@ -392,7 +413,7 @@ extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_i | |||
| 392 | unsigned int n_ports); | 413 | unsigned int n_ports); |
| 393 | extern void ata_pci_remove_one (struct pci_dev *pdev); | 414 | extern void ata_pci_remove_one (struct pci_dev *pdev); |
| 394 | #endif /* CONFIG_PCI */ | 415 | #endif /* CONFIG_PCI */ |
| 395 | extern int ata_device_add(struct ata_probe_ent *ent); | 416 | extern int ata_device_add(const struct ata_probe_ent *ent); |
| 396 | extern void ata_host_set_remove(struct ata_host_set *host_set); | 417 | extern void ata_host_set_remove(struct ata_host_set *host_set); |
| 397 | extern int ata_scsi_detect(Scsi_Host_Template *sht); | 418 | extern int ata_scsi_detect(Scsi_Host_Template *sht); |
| 398 | extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg); | 419 | extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg); |
| @@ -400,19 +421,21 @@ extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmn | |||
| 400 | extern int ata_scsi_error(struct Scsi_Host *host); | 421 | extern int ata_scsi_error(struct Scsi_Host *host); |
| 401 | extern int ata_scsi_release(struct Scsi_Host *host); | 422 | extern int ata_scsi_release(struct Scsi_Host *host); |
| 402 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); | 423 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); |
| 424 | extern int ata_ratelimit(void); | ||
| 425 | |||
| 403 | /* | 426 | /* |
| 404 | * Default driver ops implementations | 427 | * Default driver ops implementations |
| 405 | */ | 428 | */ |
| 406 | extern void ata_tf_load(struct ata_port *ap, struct ata_taskfile *tf); | 429 | extern void ata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf); |
| 407 | extern void ata_tf_read(struct ata_port *ap, struct ata_taskfile *tf); | 430 | extern void ata_tf_read(struct ata_port *ap, struct ata_taskfile *tf); |
| 408 | extern void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp); | 431 | extern void ata_tf_to_fis(const struct ata_taskfile *tf, u8 *fis, u8 pmp); |
| 409 | extern void ata_tf_from_fis(u8 *fis, struct ata_taskfile *tf); | 432 | extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf); |
| 410 | extern void ata_noop_dev_select (struct ata_port *ap, unsigned int device); | 433 | extern void ata_noop_dev_select (struct ata_port *ap, unsigned int device); |
| 411 | extern void ata_std_dev_select (struct ata_port *ap, unsigned int device); | 434 | extern void ata_std_dev_select (struct ata_port *ap, unsigned int device); |
| 412 | extern u8 ata_check_status(struct ata_port *ap); | 435 | extern u8 ata_check_status(struct ata_port *ap); |
| 413 | extern u8 ata_altstatus(struct ata_port *ap); | 436 | extern u8 ata_altstatus(struct ata_port *ap); |
| 414 | extern u8 ata_chk_err(struct ata_port *ap); | 437 | extern u8 ata_chk_err(struct ata_port *ap); |
| 415 | extern void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf); | 438 | extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf); |
| 416 | extern int ata_port_start (struct ata_port *ap); | 439 | extern int ata_port_start (struct ata_port *ap); |
| 417 | extern void ata_port_stop (struct ata_port *ap); | 440 | extern void ata_port_stop (struct ata_port *ap); |
| 418 | extern void ata_host_stop (struct ata_host_set *host_set); | 441 | extern void ata_host_stop (struct ata_host_set *host_set); |
| @@ -423,8 +446,8 @@ extern void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, | |||
| 423 | unsigned int buflen); | 446 | unsigned int buflen); |
| 424 | extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, | 447 | extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, |
| 425 | unsigned int n_elem); | 448 | unsigned int n_elem); |
| 426 | extern unsigned int ata_dev_classify(struct ata_taskfile *tf); | 449 | extern unsigned int ata_dev_classify(const struct ata_taskfile *tf); |
| 427 | extern void ata_dev_id_string(u16 *id, unsigned char *s, | 450 | extern void ata_dev_id_string(const u16 *id, unsigned char *s, |
| 428 | unsigned int ofs, unsigned int len); | 451 | unsigned int ofs, unsigned int len); |
| 429 | extern void ata_dev_config(struct ata_port *ap, unsigned int i); | 452 | extern void ata_dev_config(struct ata_port *ap, unsigned int i); |
| 430 | extern void ata_bmdma_setup (struct ata_queued_cmd *qc); | 453 | extern void ata_bmdma_setup (struct ata_queued_cmd *qc); |
| @@ -441,6 +464,32 @@ extern int ata_std_bios_param(struct scsi_device *sdev, | |||
| 441 | sector_t capacity, int geom[]); | 464 | sector_t capacity, int geom[]); |
| 442 | extern int ata_scsi_slave_config(struct scsi_device *sdev); | 465 | extern int ata_scsi_slave_config(struct scsi_device *sdev); |
| 443 | 466 | ||
| 467 | /* | ||
| 468 | * Timing helpers | ||
| 469 | */ | ||
| 470 | extern int ata_timing_compute(struct ata_device *, unsigned short, | ||
| 471 | struct ata_timing *, int, int); | ||
| 472 | extern void ata_timing_merge(const struct ata_timing *, | ||
| 473 | const struct ata_timing *, struct ata_timing *, | ||
| 474 | unsigned int); | ||
| 475 | |||
| 476 | enum { | ||
| 477 | ATA_TIMING_SETUP = (1 << 0), | ||
| 478 | ATA_TIMING_ACT8B = (1 << 1), | ||
| 479 | ATA_TIMING_REC8B = (1 << 2), | ||
| 480 | ATA_TIMING_CYC8B = (1 << 3), | ||
| 481 | ATA_TIMING_8BIT = ATA_TIMING_ACT8B | ATA_TIMING_REC8B | | ||
| 482 | ATA_TIMING_CYC8B, | ||
| 483 | ATA_TIMING_ACTIVE = (1 << 4), | ||
| 484 | ATA_TIMING_RECOVER = (1 << 5), | ||
| 485 | ATA_TIMING_CYCLE = (1 << 6), | ||
| 486 | ATA_TIMING_UDMA = (1 << 7), | ||
| 487 | ATA_TIMING_ALL = ATA_TIMING_SETUP | ATA_TIMING_ACT8B | | ||
| 488 | ATA_TIMING_REC8B | ATA_TIMING_CYC8B | | ||
| 489 | ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER | | ||
| 490 | ATA_TIMING_CYCLE | ATA_TIMING_UDMA, | ||
| 491 | }; | ||
| 492 | |||
| 444 | 493 | ||
| 445 | #ifdef CONFIG_PCI | 494 | #ifdef CONFIG_PCI |
| 446 | struct pci_bits { | 495 | struct pci_bits { |
| @@ -452,8 +501,8 @@ struct pci_bits { | |||
| 452 | 501 | ||
| 453 | extern void ata_pci_host_stop (struct ata_host_set *host_set); | 502 | extern void ata_pci_host_stop (struct ata_host_set *host_set); |
| 454 | extern struct ata_probe_ent * | 503 | extern struct ata_probe_ent * |
| 455 | ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port); | 504 | ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int portmask); |
| 456 | extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits); | 505 | extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits); |
| 457 | 506 | ||
| 458 | #endif /* CONFIG_PCI */ | 507 | #endif /* CONFIG_PCI */ |
| 459 | 508 | ||
| @@ -463,7 +512,7 @@ static inline unsigned int ata_tag_valid(unsigned int tag) | |||
| 463 | return (tag < ATA_MAX_QUEUE) ? 1 : 0; | 512 | return (tag < ATA_MAX_QUEUE) ? 1 : 0; |
| 464 | } | 513 | } |
| 465 | 514 | ||
| 466 | static inline unsigned int ata_dev_present(struct ata_device *dev) | 515 | static inline unsigned int ata_dev_present(const struct ata_device *dev) |
| 467 | { | 516 | { |
| 468 | return ((dev->class == ATA_DEV_ATA) || | 517 | return ((dev->class == ATA_DEV_ATA) || |
| 469 | (dev->class == ATA_DEV_ATAPI)); | 518 | (dev->class == ATA_DEV_ATAPI)); |
| @@ -662,7 +711,7 @@ static inline unsigned int sata_dev_present(struct ata_port *ap) | |||
| 662 | return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0; | 711 | return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0; |
| 663 | } | 712 | } |
| 664 | 713 | ||
| 665 | static inline int ata_try_flush_cache(struct ata_device *dev) | 714 | static inline int ata_try_flush_cache(const struct ata_device *dev) |
| 666 | { | 715 | { |
| 667 | return ata_id_wcache_enabled(dev->id) || | 716 | return ata_id_wcache_enabled(dev->id) || |
| 668 | ata_id_has_flush(dev->id) || | 717 | ata_id_has_flush(dev->id) || |
diff --git a/include/linux/loop.h b/include/linux/loop.h index 53fa51595443..40f63c9879d2 100644 --- a/include/linux/loop.h +++ b/include/linux/loop.h | |||
| @@ -52,7 +52,7 @@ struct loop_device { | |||
| 52 | unsigned lo_blocksize; | 52 | unsigned lo_blocksize; |
| 53 | void *key_data; | 53 | void *key_data; |
| 54 | 54 | ||
| 55 | int old_gfp_mask; | 55 | gfp_t old_gfp_mask; |
| 56 | 56 | ||
| 57 | spinlock_t lo_lock; | 57 | spinlock_t lo_lock; |
| 58 | struct bio *lo_bio; | 58 | struct bio *lo_bio; |
diff --git a/include/linux/mbcache.h b/include/linux/mbcache.h index 9263d2db2d67..99e044b4efc6 100644 --- a/include/linux/mbcache.h +++ b/include/linux/mbcache.h | |||
| @@ -22,7 +22,7 @@ struct mb_cache_entry { | |||
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | struct mb_cache_op { | 24 | struct mb_cache_op { |
| 25 | int (*free)(struct mb_cache_entry *, int); | 25 | int (*free)(struct mb_cache_entry *, gfp_t); |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
| 28 | /* Functions on caches */ | 28 | /* Functions on caches */ |
diff --git a/include/linux/mii.h b/include/linux/mii.h index 9b8d0476988a..68f5a0f392dd 100644 --- a/include/linux/mii.h +++ b/include/linux/mii.h | |||
| @@ -158,6 +158,7 @@ extern int mii_link_ok (struct mii_if_info *mii); | |||
| 158 | extern int mii_nway_restart (struct mii_if_info *mii); | 158 | extern int mii_nway_restart (struct mii_if_info *mii); |
| 159 | extern int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd); | 159 | extern int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd); |
| 160 | extern int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd); | 160 | extern int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd); |
| 161 | extern int mii_check_gmii_support(struct mii_if_info *mii); | ||
| 161 | extern void mii_check_link (struct mii_if_info *mii); | 162 | extern void mii_check_link (struct mii_if_info *mii); |
| 162 | extern unsigned int mii_check_media (struct mii_if_info *mii, | 163 | extern unsigned int mii_check_media (struct mii_if_info *mii, |
| 163 | unsigned int ok_to_print, | 164 | unsigned int ok_to_print, |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 097b3a3c693d..e1649578fb0c 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -747,7 +747,7 @@ extern unsigned long do_mremap(unsigned long addr, | |||
| 747 | * The callback will be passed nr_to_scan == 0 when the VM is querying the | 747 | * The callback will be passed nr_to_scan == 0 when the VM is querying the |
| 748 | * cache size, so a fastpath for that case is appropriate. | 748 | * cache size, so a fastpath for that case is appropriate. |
| 749 | */ | 749 | */ |
| 750 | typedef int (*shrinker_t)(int nr_to_scan, unsigned int gfp_mask); | 750 | typedef int (*shrinker_t)(int nr_to_scan, gfp_t gfp_mask); |
| 751 | 751 | ||
| 752 | /* | 752 | /* |
| 753 | * Add an aging callback. The int is the number of 'seeks' it takes | 753 | * Add an aging callback. The int is the number of 'seeks' it takes |
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 1ab78e8d6c53..aef6042f8f0b 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
| @@ -50,7 +50,7 @@ struct mmc_command { | |||
| 50 | #define MMC_ERR_INVALID 5 | 50 | #define MMC_ERR_INVALID 5 |
| 51 | 51 | ||
| 52 | struct mmc_data *data; /* data segment associated with cmd */ | 52 | struct mmc_data *data; /* data segment associated with cmd */ |
| 53 | struct mmc_request *mrq; /* assoicated request */ | 53 | struct mmc_request *mrq; /* associated request */ |
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | struct mmc_data { | 56 | struct mmc_data { |
| @@ -68,7 +68,7 @@ struct mmc_data { | |||
| 68 | unsigned int bytes_xfered; | 68 | unsigned int bytes_xfered; |
| 69 | 69 | ||
| 70 | struct mmc_command *stop; /* stop command */ | 70 | struct mmc_command *stop; /* stop command */ |
| 71 | struct mmc_request *mrq; /* assoicated request */ | 71 | struct mmc_request *mrq; /* associated request */ |
| 72 | 72 | ||
| 73 | unsigned int sg_len; /* size of scatter list */ | 73 | unsigned int sg_len; /* size of scatter list */ |
| 74 | struct scatterlist *sg; /* I/O scatter list */ | 74 | struct scatterlist *sg; /* I/O scatter list */ |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 5ed471b58f4f..7519eb4191e7 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -302,7 +302,7 @@ void get_zone_counts(unsigned long *active, unsigned long *inactive, | |||
| 302 | void build_all_zonelists(void); | 302 | void build_all_zonelists(void); |
| 303 | void wakeup_kswapd(struct zone *zone, int order); | 303 | void wakeup_kswapd(struct zone *zone, int order); |
| 304 | int zone_watermark_ok(struct zone *z, int order, unsigned long mark, | 304 | int zone_watermark_ok(struct zone *z, int order, unsigned long mark, |
| 305 | int alloc_type, int can_try_harder, int gfp_high); | 305 | int alloc_type, int can_try_harder, gfp_t gfp_high); |
| 306 | 306 | ||
| 307 | #ifdef CONFIG_HAVE_MEMORY_PRESENT | 307 | #ifdef CONFIG_HAVE_MEMORY_PRESENT |
| 308 | void memory_present(int nid, unsigned long start, unsigned long end); | 308 | void memory_present(int nid, unsigned long start, unsigned long end); |
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 2f0299a448f6..7b08c11ec4cc 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -244,4 +244,9 @@ struct pcmcia_device_id { | |||
| 244 | #define PCMCIA_DEV_ID_MATCH_FAKE_CIS 0x0200 | 244 | #define PCMCIA_DEV_ID_MATCH_FAKE_CIS 0x0200 |
| 245 | #define PCMCIA_DEV_ID_MATCH_ANONYMOUS 0x0400 | 245 | #define PCMCIA_DEV_ID_MATCH_ANONYMOUS 0x0400 |
| 246 | 246 | ||
| 247 | /* I2C */ | ||
| 248 | struct i2c_device_id { | ||
| 249 | __u16 id; | ||
| 250 | }; | ||
| 251 | |||
| 247 | #endif /* LINUX_MOD_DEVICETABLE_H */ | 252 | #endif /* LINUX_MOD_DEVICETABLE_H */ |
diff --git a/include/linux/namei.h b/include/linux/namei.h index 7db67b008cac..1c975d0d9e94 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
| @@ -8,6 +8,7 @@ struct vfsmount; | |||
| 8 | struct open_intent { | 8 | struct open_intent { |
| 9 | int flags; | 9 | int flags; |
| 10 | int create_mode; | 10 | int create_mode; |
| 11 | struct file *file; | ||
| 11 | }; | 12 | }; |
| 12 | 13 | ||
| 13 | enum { MAX_NESTED_LINKS = 5 }; | 14 | enum { MAX_NESTED_LINKS = 5 }; |
| @@ -65,6 +66,13 @@ extern int FASTCALL(link_path_walk(const char *, struct nameidata *)); | |||
| 65 | extern void path_release(struct nameidata *); | 66 | extern void path_release(struct nameidata *); |
| 66 | extern void path_release_on_umount(struct nameidata *); | 67 | extern void path_release_on_umount(struct nameidata *); |
| 67 | 68 | ||
| 69 | extern int __user_path_lookup_open(const char __user *, unsigned lookup_flags, struct nameidata *nd, int open_flags); | ||
| 70 | extern int path_lookup_open(const char *, unsigned lookup_flags, struct nameidata *, int open_flags); | ||
| 71 | extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry, | ||
| 72 | int (*open)(struct inode *, struct file *)); | ||
| 73 | extern struct file *nameidata_to_filp(struct nameidata *nd, int flags); | ||
| 74 | extern void release_open_intent(struct nameidata *); | ||
| 75 | |||
| 68 | extern struct dentry * lookup_one_len(const char *, struct dentry *, int); | 76 | extern struct dentry * lookup_one_len(const char *, struct dentry *, int); |
| 69 | extern struct dentry * lookup_hash(struct qstr *, struct dentry *); | 77 | extern struct dentry * lookup_hash(struct qstr *, struct dentry *); |
| 70 | 78 | ||
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 368e4c825ff1..c6efce4a04a4 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -308,6 +308,7 @@ struct net_device | |||
| 308 | #define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ | 308 | #define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ |
| 309 | #define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */ | 309 | #define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */ |
| 310 | #define NETIF_F_LLTX 4096 /* LockLess TX */ | 310 | #define NETIF_F_LLTX 4096 /* LockLess TX */ |
| 311 | #define NETIF_F_UFO 8192 /* Can offload UDP Large Send*/ | ||
| 311 | 312 | ||
| 312 | struct net_device *next_sched; | 313 | struct net_device *next_sched; |
| 313 | 314 | ||
| @@ -873,11 +874,9 @@ static inline void netif_rx_complete(struct net_device *dev) | |||
| 873 | 874 | ||
| 874 | static inline void netif_poll_disable(struct net_device *dev) | 875 | static inline void netif_poll_disable(struct net_device *dev) |
| 875 | { | 876 | { |
| 876 | while (test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state)) { | 877 | while (test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state)) |
| 877 | /* No hurry. */ | 878 | /* No hurry. */ |
| 878 | current->state = TASK_INTERRUPTIBLE; | 879 | schedule_timeout_interruptible(1); |
| 879 | schedule_timeout(1); | ||
| 880 | } | ||
| 881 | } | 880 | } |
| 882 | 881 | ||
| 883 | static inline void netif_poll_enable(struct net_device *dev) | 882 | static inline void netif_poll_enable(struct net_device *dev) |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 9a6047ff1b25..325fe7ae49bb 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -41,6 +41,10 @@ | |||
| 41 | #define NFS_MAX_FILE_IO_BUFFER_SIZE 32768 | 41 | #define NFS_MAX_FILE_IO_BUFFER_SIZE 32768 |
| 42 | #define NFS_DEF_FILE_IO_BUFFER_SIZE 4096 | 42 | #define NFS_DEF_FILE_IO_BUFFER_SIZE 4096 |
| 43 | 43 | ||
| 44 | /* Default timeout values */ | ||
| 45 | #define NFS_MAX_UDP_TIMEOUT (60*HZ) | ||
| 46 | #define NFS_MAX_TCP_TIMEOUT (600*HZ) | ||
| 47 | |||
| 44 | /* | 48 | /* |
| 45 | * superblock magic number for NFS | 49 | * superblock magic number for NFS |
| 46 | */ | 50 | */ |
| @@ -137,6 +141,7 @@ struct nfs_inode { | |||
| 137 | unsigned long attrtimeo_timestamp; | 141 | unsigned long attrtimeo_timestamp; |
| 138 | __u64 change_attr; /* v4 only */ | 142 | __u64 change_attr; /* v4 only */ |
| 139 | 143 | ||
| 144 | unsigned long last_updated; | ||
| 140 | /* "Generation counter" for the attribute cache. This is | 145 | /* "Generation counter" for the attribute cache. This is |
| 141 | * bumped whenever we update the metadata on the | 146 | * bumped whenever we update the metadata on the |
| 142 | * server. | 147 | * server. |
| @@ -236,13 +241,17 @@ static inline int nfs_caches_unstable(struct inode *inode) | |||
| 236 | return atomic_read(&NFS_I(inode)->data_updates) != 0; | 241 | return atomic_read(&NFS_I(inode)->data_updates) != 0; |
| 237 | } | 242 | } |
| 238 | 243 | ||
| 244 | static inline void nfs_mark_for_revalidate(struct inode *inode) | ||
| 245 | { | ||
| 246 | spin_lock(&inode->i_lock); | ||
| 247 | NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS; | ||
| 248 | spin_unlock(&inode->i_lock); | ||
| 249 | } | ||
| 250 | |||
| 239 | static inline void NFS_CACHEINV(struct inode *inode) | 251 | static inline void NFS_CACHEINV(struct inode *inode) |
| 240 | { | 252 | { |
| 241 | if (!nfs_caches_unstable(inode)) { | 253 | if (!nfs_caches_unstable(inode)) |
| 242 | spin_lock(&inode->i_lock); | 254 | nfs_mark_for_revalidate(inode); |
| 243 | NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS; | ||
| 244 | spin_unlock(&inode->i_lock); | ||
| 245 | } | ||
| 246 | } | 255 | } |
| 247 | 256 | ||
| 248 | static inline int nfs_server_capable(struct inode *inode, int cap) | 257 | static inline int nfs_server_capable(struct inode *inode, int cap) |
| @@ -276,7 +285,7 @@ static inline long nfs_save_change_attribute(struct inode *inode) | |||
| 276 | static inline int nfs_verify_change_attribute(struct inode *inode, unsigned long chattr) | 285 | static inline int nfs_verify_change_attribute(struct inode *inode, unsigned long chattr) |
| 277 | { | 286 | { |
| 278 | return !nfs_caches_unstable(inode) | 287 | return !nfs_caches_unstable(inode) |
| 279 | && chattr == NFS_I(inode)->cache_change_attribute; | 288 | && time_after_eq(chattr, NFS_I(inode)->cache_change_attribute); |
| 280 | } | 289 | } |
| 281 | 290 | ||
| 282 | /* | 291 | /* |
| @@ -286,6 +295,7 @@ extern void nfs_zap_caches(struct inode *); | |||
| 286 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, | 295 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, |
| 287 | struct nfs_fattr *); | 296 | struct nfs_fattr *); |
| 288 | extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *); | 297 | extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *); |
| 298 | extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr); | ||
| 289 | extern int nfs_getattr(struct vfsmount *, struct dentry *, struct kstat *); | 299 | extern int nfs_getattr(struct vfsmount *, struct dentry *, struct kstat *); |
| 290 | extern int nfs_permission(struct inode *, int, struct nameidata *); | 300 | extern int nfs_permission(struct inode *, int, struct nameidata *); |
| 291 | extern int nfs_access_get_cached(struct inode *, struct rpc_cred *, struct nfs_access_entry *); | 301 | extern int nfs_access_get_cached(struct inode *, struct rpc_cred *, struct nfs_access_entry *); |
| @@ -312,6 +322,12 @@ extern void nfs_file_clear_open_context(struct file *filp); | |||
| 312 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ | 322 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ |
| 313 | extern u32 root_nfs_parse_addr(char *name); /*__init*/ | 323 | extern u32 root_nfs_parse_addr(char *name); /*__init*/ |
| 314 | 324 | ||
| 325 | static inline void nfs_fattr_init(struct nfs_fattr *fattr) | ||
| 326 | { | ||
| 327 | fattr->valid = 0; | ||
| 328 | fattr->time_start = jiffies; | ||
| 329 | } | ||
| 330 | |||
| 315 | /* | 331 | /* |
| 316 | * linux/fs/nfs/file.c | 332 | * linux/fs/nfs/file.c |
| 317 | */ | 333 | */ |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index a2bf6914ff1b..40718669b9c8 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -41,7 +41,7 @@ struct nfs_fattr { | |||
| 41 | __u32 bitmap[2]; /* NFSv4 returned attribute bitmap */ | 41 | __u32 bitmap[2]; /* NFSv4 returned attribute bitmap */ |
| 42 | __u64 change_attr; /* NFSv4 change attribute */ | 42 | __u64 change_attr; /* NFSv4 change attribute */ |
| 43 | __u64 pre_change_attr;/* pre-op NFSv4 change attribute */ | 43 | __u64 pre_change_attr;/* pre-op NFSv4 change attribute */ |
| 44 | unsigned long timestamp; | 44 | unsigned long time_start; |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | #define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */ | 47 | #define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */ |
| @@ -96,12 +96,13 @@ struct nfs4_change_info { | |||
| 96 | u64 after; | 96 | u64 after; |
| 97 | }; | 97 | }; |
| 98 | 98 | ||
| 99 | struct nfs_seqid; | ||
| 99 | /* | 100 | /* |
| 100 | * Arguments to the open call. | 101 | * Arguments to the open call. |
| 101 | */ | 102 | */ |
| 102 | struct nfs_openargs { | 103 | struct nfs_openargs { |
| 103 | const struct nfs_fh * fh; | 104 | const struct nfs_fh * fh; |
| 104 | __u32 seqid; | 105 | struct nfs_seqid * seqid; |
| 105 | int open_flags; | 106 | int open_flags; |
| 106 | __u64 clientid; | 107 | __u64 clientid; |
| 107 | __u32 id; | 108 | __u32 id; |
| @@ -123,6 +124,7 @@ struct nfs_openres { | |||
| 123 | struct nfs4_change_info cinfo; | 124 | struct nfs4_change_info cinfo; |
| 124 | __u32 rflags; | 125 | __u32 rflags; |
| 125 | struct nfs_fattr * f_attr; | 126 | struct nfs_fattr * f_attr; |
| 127 | struct nfs_fattr * dir_attr; | ||
| 126 | const struct nfs_server *server; | 128 | const struct nfs_server *server; |
| 127 | int delegation_type; | 129 | int delegation_type; |
| 128 | nfs4_stateid delegation; | 130 | nfs4_stateid delegation; |
| @@ -136,7 +138,7 @@ struct nfs_openres { | |||
| 136 | struct nfs_open_confirmargs { | 138 | struct nfs_open_confirmargs { |
| 137 | const struct nfs_fh * fh; | 139 | const struct nfs_fh * fh; |
| 138 | nfs4_stateid stateid; | 140 | nfs4_stateid stateid; |
| 139 | __u32 seqid; | 141 | struct nfs_seqid * seqid; |
| 140 | }; | 142 | }; |
| 141 | 143 | ||
| 142 | struct nfs_open_confirmres { | 144 | struct nfs_open_confirmres { |
| @@ -148,13 +150,16 @@ struct nfs_open_confirmres { | |||
| 148 | */ | 150 | */ |
| 149 | struct nfs_closeargs { | 151 | struct nfs_closeargs { |
| 150 | struct nfs_fh * fh; | 152 | struct nfs_fh * fh; |
| 151 | nfs4_stateid stateid; | 153 | nfs4_stateid * stateid; |
| 152 | __u32 seqid; | 154 | struct nfs_seqid * seqid; |
| 153 | int open_flags; | 155 | int open_flags; |
| 156 | const u32 * bitmask; | ||
| 154 | }; | 157 | }; |
| 155 | 158 | ||
| 156 | struct nfs_closeres { | 159 | struct nfs_closeres { |
| 157 | nfs4_stateid stateid; | 160 | nfs4_stateid stateid; |
| 161 | struct nfs_fattr * fattr; | ||
| 162 | const struct nfs_server *server; | ||
| 158 | }; | 163 | }; |
| 159 | /* | 164 | /* |
| 160 | * * Arguments to the lock,lockt, and locku call. | 165 | * * Arguments to the lock,lockt, and locku call. |
| @@ -164,30 +169,19 @@ struct nfs_lowner { | |||
| 164 | u32 id; | 169 | u32 id; |
| 165 | }; | 170 | }; |
| 166 | 171 | ||
| 167 | struct nfs_open_to_lock { | ||
| 168 | __u32 open_seqid; | ||
| 169 | nfs4_stateid open_stateid; | ||
| 170 | __u32 lock_seqid; | ||
| 171 | struct nfs_lowner lock_owner; | ||
| 172 | }; | ||
| 173 | |||
| 174 | struct nfs_exist_lock { | ||
| 175 | nfs4_stateid stateid; | ||
| 176 | __u32 seqid; | ||
| 177 | }; | ||
| 178 | |||
| 179 | struct nfs_lock_opargs { | 172 | struct nfs_lock_opargs { |
| 173 | struct nfs_seqid * lock_seqid; | ||
| 174 | nfs4_stateid * lock_stateid; | ||
| 175 | struct nfs_seqid * open_seqid; | ||
| 176 | nfs4_stateid * open_stateid; | ||
| 177 | struct nfs_lowner lock_owner; | ||
| 180 | __u32 reclaim; | 178 | __u32 reclaim; |
| 181 | __u32 new_lock_owner; | 179 | __u32 new_lock_owner; |
| 182 | union { | ||
| 183 | struct nfs_open_to_lock *open_lock; | ||
| 184 | struct nfs_exist_lock *exist_lock; | ||
| 185 | } u; | ||
| 186 | }; | 180 | }; |
| 187 | 181 | ||
| 188 | struct nfs_locku_opargs { | 182 | struct nfs_locku_opargs { |
| 189 | __u32 seqid; | 183 | struct nfs_seqid * seqid; |
| 190 | nfs4_stateid stateid; | 184 | nfs4_stateid * stateid; |
| 191 | }; | 185 | }; |
| 192 | 186 | ||
| 193 | struct nfs_lockargs { | 187 | struct nfs_lockargs { |
| @@ -262,6 +256,7 @@ struct nfs_writeargs { | |||
| 262 | enum nfs3_stable_how stable; | 256 | enum nfs3_stable_how stable; |
| 263 | unsigned int pgbase; | 257 | unsigned int pgbase; |
| 264 | struct page ** pages; | 258 | struct page ** pages; |
| 259 | const u32 * bitmask; | ||
| 265 | }; | 260 | }; |
| 266 | 261 | ||
| 267 | struct nfs_writeverf { | 262 | struct nfs_writeverf { |
| @@ -273,6 +268,7 @@ struct nfs_writeres { | |||
| 273 | struct nfs_fattr * fattr; | 268 | struct nfs_fattr * fattr; |
| 274 | struct nfs_writeverf * verf; | 269 | struct nfs_writeverf * verf; |
| 275 | __u32 count; | 270 | __u32 count; |
| 271 | const struct nfs_server *server; | ||
| 276 | }; | 272 | }; |
| 277 | 273 | ||
| 278 | /* | 274 | /* |
| @@ -550,6 +546,7 @@ struct nfs4_create_res { | |||
| 550 | struct nfs_fh * fh; | 546 | struct nfs_fh * fh; |
| 551 | struct nfs_fattr * fattr; | 547 | struct nfs_fattr * fattr; |
| 552 | struct nfs4_change_info dir_cinfo; | 548 | struct nfs4_change_info dir_cinfo; |
| 549 | struct nfs_fattr * dir_fattr; | ||
| 553 | }; | 550 | }; |
| 554 | 551 | ||
| 555 | struct nfs4_fsinfo_arg { | 552 | struct nfs4_fsinfo_arg { |
| @@ -571,8 +568,17 @@ struct nfs4_link_arg { | |||
| 571 | const struct nfs_fh * fh; | 568 | const struct nfs_fh * fh; |
| 572 | const struct nfs_fh * dir_fh; | 569 | const struct nfs_fh * dir_fh; |
| 573 | const struct qstr * name; | 570 | const struct qstr * name; |
| 571 | const u32 * bitmask; | ||
| 572 | }; | ||
| 573 | |||
| 574 | struct nfs4_link_res { | ||
| 575 | const struct nfs_server * server; | ||
| 576 | struct nfs_fattr * fattr; | ||
| 577 | struct nfs4_change_info cinfo; | ||
| 578 | struct nfs_fattr * dir_attr; | ||
| 574 | }; | 579 | }; |
| 575 | 580 | ||
| 581 | |||
| 576 | struct nfs4_lookup_arg { | 582 | struct nfs4_lookup_arg { |
| 577 | const struct nfs_fh * dir_fh; | 583 | const struct nfs_fh * dir_fh; |
| 578 | const struct qstr * name; | 584 | const struct qstr * name; |
| @@ -619,6 +625,13 @@ struct nfs4_readlink { | |||
| 619 | struct nfs4_remove_arg { | 625 | struct nfs4_remove_arg { |
| 620 | const struct nfs_fh * fh; | 626 | const struct nfs_fh * fh; |
| 621 | const struct qstr * name; | 627 | const struct qstr * name; |
| 628 | const u32 * bitmask; | ||
| 629 | }; | ||
| 630 | |||
| 631 | struct nfs4_remove_res { | ||
| 632 | const struct nfs_server * server; | ||
| 633 | struct nfs4_change_info cinfo; | ||
| 634 | struct nfs_fattr * dir_attr; | ||
| 622 | }; | 635 | }; |
| 623 | 636 | ||
| 624 | struct nfs4_rename_arg { | 637 | struct nfs4_rename_arg { |
| @@ -626,11 +639,15 @@ struct nfs4_rename_arg { | |||
| 626 | const struct nfs_fh * new_dir; | 639 | const struct nfs_fh * new_dir; |
| 627 | const struct qstr * old_name; | 640 | const struct qstr * old_name; |
| 628 | const struct qstr * new_name; | 641 | const struct qstr * new_name; |
| 642 | const u32 * bitmask; | ||
| 629 | }; | 643 | }; |
| 630 | 644 | ||
| 631 | struct nfs4_rename_res { | 645 | struct nfs4_rename_res { |
| 646 | const struct nfs_server * server; | ||
| 632 | struct nfs4_change_info old_cinfo; | 647 | struct nfs4_change_info old_cinfo; |
| 648 | struct nfs_fattr * old_fattr; | ||
| 633 | struct nfs4_change_info new_cinfo; | 649 | struct nfs4_change_info new_cinfo; |
| 650 | struct nfs_fattr * new_fattr; | ||
| 634 | }; | 651 | }; |
| 635 | 652 | ||
| 636 | struct nfs4_setclientid { | 653 | struct nfs4_setclientid { |
| @@ -722,7 +739,7 @@ struct nfs_rpc_ops { | |||
| 722 | int (*write) (struct nfs_write_data *); | 739 | int (*write) (struct nfs_write_data *); |
| 723 | int (*commit) (struct nfs_write_data *); | 740 | int (*commit) (struct nfs_write_data *); |
| 724 | int (*create) (struct inode *, struct dentry *, | 741 | int (*create) (struct inode *, struct dentry *, |
| 725 | struct iattr *, int); | 742 | struct iattr *, int, struct nameidata *); |
| 726 | int (*remove) (struct inode *, struct qstr *); | 743 | int (*remove) (struct inode *, struct qstr *); |
| 727 | int (*unlink_setup) (struct rpc_message *, | 744 | int (*unlink_setup) (struct rpc_message *, |
| 728 | struct dentry *, struct qstr *); | 745 | struct dentry *, struct qstr *); |
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index acbf31c154f8..ba6c310a055f 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h | |||
| @@ -21,16 +21,17 @@ | |||
| 21 | 21 | ||
| 22 | static inline gfp_t mapping_gfp_mask(struct address_space * mapping) | 22 | static inline gfp_t mapping_gfp_mask(struct address_space * mapping) |
| 23 | { | 23 | { |
| 24 | return mapping->flags & __GFP_BITS_MASK; | 24 | return (__force gfp_t)mapping->flags & __GFP_BITS_MASK; |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | /* | 27 | /* |
| 28 | * This is non-atomic. Only to be used before the mapping is activated. | 28 | * This is non-atomic. Only to be used before the mapping is activated. |
| 29 | * Probably needs a barrier... | 29 | * Probably needs a barrier... |
| 30 | */ | 30 | */ |
| 31 | static inline void mapping_set_gfp_mask(struct address_space *m, int mask) | 31 | static inline void mapping_set_gfp_mask(struct address_space *m, gfp_t mask) |
| 32 | { | 32 | { |
| 33 | m->flags = (m->flags & ~__GFP_BITS_MASK) | mask; | 33 | m->flags = (m->flags & ~(__force unsigned long)__GFP_BITS_MASK) | |
| 34 | (__force unsigned long)mask; | ||
| 34 | } | 35 | } |
| 35 | 36 | ||
| 36 | /* | 37 | /* |
| @@ -69,7 +70,7 @@ extern struct page * find_lock_page(struct address_space *mapping, | |||
| 69 | extern struct page * find_trylock_page(struct address_space *mapping, | 70 | extern struct page * find_trylock_page(struct address_space *mapping, |
| 70 | unsigned long index); | 71 | unsigned long index); |
| 71 | extern struct page * find_or_create_page(struct address_space *mapping, | 72 | extern struct page * find_or_create_page(struct address_space *mapping, |
| 72 | unsigned long index, unsigned int gfp_mask); | 73 | unsigned long index, gfp_t gfp_mask); |
| 73 | unsigned find_get_pages(struct address_space *mapping, pgoff_t start, | 74 | unsigned find_get_pages(struct address_space *mapping, pgoff_t start, |
| 74 | unsigned int nr_pages, struct page **pages); | 75 | unsigned int nr_pages, struct page **pages); |
| 75 | unsigned find_get_pages_tag(struct address_space *mapping, pgoff_t *index, | 76 | unsigned find_get_pages_tag(struct address_space *mapping, pgoff_t *index, |
| @@ -92,9 +93,9 @@ extern int read_cache_pages(struct address_space *mapping, | |||
| 92 | struct list_head *pages, filler_t *filler, void *data); | 93 | struct list_head *pages, filler_t *filler, void *data); |
| 93 | 94 | ||
| 94 | int add_to_page_cache(struct page *page, struct address_space *mapping, | 95 | int add_to_page_cache(struct page *page, struct address_space *mapping, |
| 95 | unsigned long index, int gfp_mask); | 96 | unsigned long index, gfp_t gfp_mask); |
| 96 | int add_to_page_cache_lru(struct page *page, struct address_space *mapping, | 97 | int add_to_page_cache_lru(struct page *page, struct address_space *mapping, |
| 97 | unsigned long index, int gfp_mask); | 98 | unsigned long index, gfp_t gfp_mask); |
| 98 | extern void remove_from_page_cache(struct page *page); | 99 | extern void remove_from_page_cache(struct page *page); |
| 99 | extern void __remove_from_page_cache(struct page *page); | 100 | extern void __remove_from_page_cache(struct page *page); |
| 100 | 101 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f74ed9462475..71834f05504f 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -723,6 +723,7 @@ | |||
| 723 | #define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 | 723 | #define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 |
| 724 | #define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 | 724 | #define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 |
| 725 | #define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 | 725 | #define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 |
| 726 | #define PCI_DEVICE_ID_HP_DIVA_HURRICANE 0x132a | ||
| 726 | #define PCI_DEVICE_ID_HP_CISS 0x3210 | 727 | #define PCI_DEVICE_ID_HP_CISS 0x3210 |
| 727 | #define PCI_DEVICE_ID_HP_CISSA 0x3220 | 728 | #define PCI_DEVICE_ID_HP_CISSA 0x3220 |
| 728 | #define PCI_DEVICE_ID_HP_CISSB 0x3222 | 729 | #define PCI_DEVICE_ID_HP_CISSB 0x3222 |
| @@ -2696,6 +2697,7 @@ | |||
| 2696 | 2697 | ||
| 2697 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d | 2698 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d |
| 2698 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 | 2699 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 |
| 2700 | #define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055 | ||
| 2699 | 2701 | ||
| 2700 | #define PCI_VENDOR_ID_TIGERJET 0xe159 | 2702 | #define PCI_VENDOR_ID_TIGERJET 0xe159 |
| 2701 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 | 2703 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 |
diff --git a/include/linux/pm.h b/include/linux/pm.h index 5cfb07648eca..7897cf500c51 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -219,7 +219,9 @@ typedef struct pm_message { | |||
| 219 | 219 | ||
| 220 | struct dev_pm_info { | 220 | struct dev_pm_info { |
| 221 | pm_message_t power_state; | 221 | pm_message_t power_state; |
| 222 | unsigned can_wakeup:1; | ||
| 222 | #ifdef CONFIG_PM | 223 | #ifdef CONFIG_PM |
| 224 | unsigned should_wakeup:1; | ||
| 223 | pm_message_t prev_state; | 225 | pm_message_t prev_state; |
| 224 | void * saved_state; | 226 | void * saved_state; |
| 225 | atomic_t pm_users; | 227 | atomic_t pm_users; |
| @@ -236,13 +238,35 @@ extern void device_resume(void); | |||
| 236 | 238 | ||
| 237 | #ifdef CONFIG_PM | 239 | #ifdef CONFIG_PM |
| 238 | extern int device_suspend(pm_message_t state); | 240 | extern int device_suspend(pm_message_t state); |
| 239 | #else | 241 | |
| 242 | #define device_set_wakeup_enable(dev,val) \ | ||
| 243 | ((dev)->power.should_wakeup = !!(val)) | ||
| 244 | #define device_may_wakeup(dev) \ | ||
| 245 | (device_can_wakeup(dev) && (dev)->power.should_wakeup) | ||
| 246 | |||
| 247 | #else /* !CONFIG_PM */ | ||
| 248 | |||
| 240 | static inline int device_suspend(pm_message_t state) | 249 | static inline int device_suspend(pm_message_t state) |
| 241 | { | 250 | { |
| 242 | return 0; | 251 | return 0; |
| 243 | } | 252 | } |
| 253 | |||
| 254 | #define device_set_wakeup_enable(dev,val) do{}while(0) | ||
| 255 | #define device_may_wakeup(dev) (0) | ||
| 256 | |||
| 244 | #endif | 257 | #endif |
| 245 | 258 | ||
| 259 | /* changes to device_may_wakeup take effect on the next pm state change. | ||
| 260 | * by default, devices should wakeup if they can. | ||
| 261 | */ | ||
| 262 | #define device_can_wakeup(dev) \ | ||
| 263 | ((dev)->power.can_wakeup) | ||
| 264 | #define device_init_wakeup(dev,val) \ | ||
| 265 | do { \ | ||
| 266 | device_can_wakeup(dev) = !!(val); \ | ||
| 267 | device_set_wakeup_enable(dev,val); \ | ||
| 268 | } while(0) | ||
| 269 | |||
| 246 | #endif /* __KERNEL__ */ | 270 | #endif /* __KERNEL__ */ |
| 247 | 271 | ||
| 248 | #endif /* _LINUX_PM_H */ | 272 | #endif /* _LINUX_PM_H */ |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index 045d4761febc..9f0f9281f42a 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | struct radix_tree_root { | 25 | struct radix_tree_root { |
| 26 | unsigned int height; | 26 | unsigned int height; |
| 27 | unsigned int gfp_mask; | 27 | gfp_t gfp_mask; |
| 28 | struct radix_tree_node *rnode; | 28 | struct radix_tree_node *rnode; |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index af00b10294cd..001ab82df051 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
| @@ -1972,7 +1972,7 @@ extern struct address_space_operations reiserfs_address_space_operations; | |||
| 1972 | 1972 | ||
| 1973 | /* fix_nodes.c */ | 1973 | /* fix_nodes.c */ |
| 1974 | #ifdef CONFIG_REISERFS_CHECK | 1974 | #ifdef CONFIG_REISERFS_CHECK |
| 1975 | void *reiserfs_kmalloc(size_t size, int flags, struct super_block *s); | 1975 | void *reiserfs_kmalloc(size_t size, gfp_t flags, struct super_block *s); |
| 1976 | void reiserfs_kfree(const void *vp, size_t size, struct super_block *s); | 1976 | void reiserfs_kfree(const void *vp, size_t size, struct super_block *s); |
| 1977 | #else | 1977 | #else |
| 1978 | static inline void *reiserfs_kmalloc(size_t size, int flags, | 1978 | static inline void *reiserfs_kmalloc(size_t size, int flags, |
diff --git a/include/linux/sdladrv.h b/include/linux/sdladrv.h index 78f634007fc6..c85e103d5e7b 100644 --- a/include/linux/sdladrv.h +++ b/include/linux/sdladrv.h | |||
| @@ -52,12 +52,8 @@ typedef struct sdlahw | |||
| 52 | 52 | ||
| 53 | extern int sdla_setup (sdlahw_t* hw, void* sfm, unsigned len); | 53 | extern int sdla_setup (sdlahw_t* hw, void* sfm, unsigned len); |
| 54 | extern int sdla_down (sdlahw_t* hw); | 54 | extern int sdla_down (sdlahw_t* hw); |
| 55 | extern int sdla_inten (sdlahw_t* hw); | ||
| 56 | extern int sdla_intde (sdlahw_t* hw); | ||
| 57 | extern int sdla_intack (sdlahw_t* hw); | ||
| 58 | extern void S514_intack (sdlahw_t* hw, u32 int_status); | 55 | extern void S514_intack (sdlahw_t* hw, u32 int_status); |
| 59 | extern void read_S514_int_stat (sdlahw_t* hw, u32* int_status); | 56 | extern void read_S514_int_stat (sdlahw_t* hw, u32* int_status); |
| 60 | extern int sdla_intr (sdlahw_t* hw); | ||
| 61 | extern int sdla_mapmem (sdlahw_t* hw, unsigned long addr); | 57 | extern int sdla_mapmem (sdlahw_t* hw, unsigned long addr); |
| 62 | extern int sdla_peek (sdlahw_t* hw, unsigned long addr, void* buf, | 58 | extern int sdla_peek (sdlahw_t* hw, unsigned long addr, void* buf, |
| 63 | unsigned len); | 59 | unsigned len); |
diff --git a/include/linux/security.h b/include/linux/security.h index 627382e74057..dac956ed98f0 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -1210,7 +1210,7 @@ struct security_operations { | |||
| 1210 | int (*socket_shutdown) (struct socket * sock, int how); | 1210 | int (*socket_shutdown) (struct socket * sock, int how); |
| 1211 | int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); | 1211 | int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); |
| 1212 | int (*socket_getpeersec) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); | 1212 | int (*socket_getpeersec) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); |
| 1213 | int (*sk_alloc_security) (struct sock *sk, int family, int priority); | 1213 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); |
| 1214 | void (*sk_free_security) (struct sock *sk); | 1214 | void (*sk_free_security) (struct sock *sk); |
| 1215 | #endif /* CONFIG_SECURITY_NETWORK */ | 1215 | #endif /* CONFIG_SECURITY_NETWORK */ |
| 1216 | }; | 1216 | }; |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 8f5d9e7f8734..4286d832166f 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -137,6 +137,8 @@ struct skb_shared_info { | |||
| 137 | unsigned int nr_frags; | 137 | unsigned int nr_frags; |
| 138 | unsigned short tso_size; | 138 | unsigned short tso_size; |
| 139 | unsigned short tso_segs; | 139 | unsigned short tso_segs; |
| 140 | unsigned short ufo_size; | ||
| 141 | unsigned int ip6_frag_id; | ||
| 140 | struct sk_buff *frag_list; | 142 | struct sk_buff *frag_list; |
| 141 | skb_frag_t frags[MAX_SKB_FRAGS]; | 143 | skb_frag_t frags[MAX_SKB_FRAGS]; |
| 142 | }; | 144 | }; |
| @@ -171,7 +173,6 @@ enum { | |||
| 171 | * struct sk_buff - socket buffer | 173 | * struct sk_buff - socket buffer |
| 172 | * @next: Next buffer in list | 174 | * @next: Next buffer in list |
| 173 | * @prev: Previous buffer in list | 175 | * @prev: Previous buffer in list |
| 174 | * @list: List we are on | ||
| 175 | * @sk: Socket we are owned by | 176 | * @sk: Socket we are owned by |
| 176 | * @tstamp: Time we arrived | 177 | * @tstamp: Time we arrived |
| 177 | * @dev: Device we arrived on/are leaving by | 178 | * @dev: Device we arrived on/are leaving by |
| @@ -190,6 +191,7 @@ enum { | |||
| 190 | * @cloned: Head may be cloned (check refcnt to be sure) | 191 | * @cloned: Head may be cloned (check refcnt to be sure) |
| 191 | * @nohdr: Payload reference only, must not modify header | 192 | * @nohdr: Payload reference only, must not modify header |
| 192 | * @pkt_type: Packet class | 193 | * @pkt_type: Packet class |
| 194 | * @fclone: skbuff clone status | ||
| 193 | * @ip_summed: Driver fed us an IP checksum | 195 | * @ip_summed: Driver fed us an IP checksum |
| 194 | * @priority: Packet queueing priority | 196 | * @priority: Packet queueing priority |
| 195 | * @users: User count - see {datagram,tcp}.c | 197 | * @users: User count - see {datagram,tcp}.c |
| @@ -202,6 +204,7 @@ enum { | |||
| 202 | * @destructor: Destruct function | 204 | * @destructor: Destruct function |
| 203 | * @nfmark: Can be used for communication between hooks | 205 | * @nfmark: Can be used for communication between hooks |
| 204 | * @nfct: Associated connection, if any | 206 | * @nfct: Associated connection, if any |
| 207 | * @ipvs_property: skbuff is owned by ipvs | ||
| 205 | * @nfctinfo: Relationship of this skb to the connection | 208 | * @nfctinfo: Relationship of this skb to the connection |
| 206 | * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c | 209 | * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c |
| 207 | * @tc_index: Traffic control index | 210 | * @tc_index: Traffic control index |
| @@ -340,6 +343,11 @@ extern void skb_over_panic(struct sk_buff *skb, int len, | |||
| 340 | extern void skb_under_panic(struct sk_buff *skb, int len, | 343 | extern void skb_under_panic(struct sk_buff *skb, int len, |
| 341 | void *here); | 344 | void *here); |
| 342 | 345 | ||
| 346 | extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, | ||
| 347 | int getfrag(void *from, char *to, int offset, | ||
| 348 | int len,int odd, struct sk_buff *skb), | ||
| 349 | void *from, int length); | ||
| 350 | |||
| 343 | struct skb_seq_state | 351 | struct skb_seq_state |
| 344 | { | 352 | { |
| 345 | __u32 lower_offset; | 353 | __u32 lower_offset; |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 5fc04a16ecb0..09b9aa60063d 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -121,7 +121,7 @@ extern unsigned int ksize(const void *); | |||
| 121 | extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node); | 121 | extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node); |
| 122 | extern void *kmalloc_node(size_t size, gfp_t flags, int node); | 122 | extern void *kmalloc_node(size_t size, gfp_t flags, int node); |
| 123 | #else | 123 | #else |
| 124 | static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, int flags, int node) | 124 | static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, gfp_t flags, int node) |
| 125 | { | 125 | { |
| 126 | return kmem_cache_alloc(cachep, flags); | 126 | return kmem_cache_alloc(cachep, flags); |
| 127 | } | 127 | } |
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 04ebc24db348..b68c11a2d6dd 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
| @@ -66,7 +66,12 @@ struct rpc_cred_cache { | |||
| 66 | 66 | ||
| 67 | struct rpc_auth { | 67 | struct rpc_auth { |
| 68 | unsigned int au_cslack; /* call cred size estimate */ | 68 | unsigned int au_cslack; /* call cred size estimate */ |
| 69 | unsigned int au_rslack; /* reply verf size guess */ | 69 | /* guess at number of u32's auth adds before |
| 70 | * reply data; normally the verifier size: */ | ||
| 71 | unsigned int au_rslack; | ||
| 72 | /* for gss, used to calculate au_rslack: */ | ||
| 73 | unsigned int au_verfsize; | ||
| 74 | |||
| 70 | unsigned int au_flags; /* various flags */ | 75 | unsigned int au_flags; /* various flags */ |
| 71 | struct rpc_authops * au_ops; /* operations */ | 76 | struct rpc_authops * au_ops; /* operations */ |
| 72 | rpc_authflavor_t au_flavor; /* pseudoflavor (note may | 77 | rpc_authflavor_t au_flavor; /* pseudoflavor (note may |
diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h index eadb31e3c198..1a42d902bc11 100644 --- a/include/linux/sunrpc/debug.h +++ b/include/linux/sunrpc/debug.h | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #define RPCDBG_AUTH 0x0010 | 32 | #define RPCDBG_AUTH 0x0010 |
| 33 | #define RPCDBG_PMAP 0x0020 | 33 | #define RPCDBG_PMAP 0x0020 |
| 34 | #define RPCDBG_SCHED 0x0040 | 34 | #define RPCDBG_SCHED 0x0040 |
| 35 | #define RPCDBG_TRANS 0x0080 | ||
| 35 | #define RPCDBG_SVCSOCK 0x0100 | 36 | #define RPCDBG_SVCSOCK 0x0100 |
| 36 | #define RPCDBG_SVCDSP 0x0200 | 37 | #define RPCDBG_SVCDSP 0x0200 |
| 37 | #define RPCDBG_MISC 0x0400 | 38 | #define RPCDBG_MISC 0x0400 |
| @@ -94,6 +95,8 @@ enum { | |||
| 94 | CTL_NLMDEBUG, | 95 | CTL_NLMDEBUG, |
| 95 | CTL_SLOTTABLE_UDP, | 96 | CTL_SLOTTABLE_UDP, |
| 96 | CTL_SLOTTABLE_TCP, | 97 | CTL_SLOTTABLE_TCP, |
| 98 | CTL_MIN_RESVPORT, | ||
| 99 | CTL_MAX_RESVPORT, | ||
| 97 | }; | 100 | }; |
| 98 | 101 | ||
| 99 | #endif /* _LINUX_SUNRPC_DEBUG_H_ */ | 102 | #endif /* _LINUX_SUNRPC_DEBUG_H_ */ |
diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h index 689262f63059..9b8bcf125c18 100644 --- a/include/linux/sunrpc/gss_api.h +++ b/include/linux/sunrpc/gss_api.h | |||
| @@ -40,14 +40,21 @@ int gss_import_sec_context( | |||
| 40 | struct gss_ctx **ctx_id); | 40 | struct gss_ctx **ctx_id); |
| 41 | u32 gss_get_mic( | 41 | u32 gss_get_mic( |
| 42 | struct gss_ctx *ctx_id, | 42 | struct gss_ctx *ctx_id, |
| 43 | u32 qop, | ||
| 44 | struct xdr_buf *message, | 43 | struct xdr_buf *message, |
| 45 | struct xdr_netobj *mic_token); | 44 | struct xdr_netobj *mic_token); |
| 46 | u32 gss_verify_mic( | 45 | u32 gss_verify_mic( |
| 47 | struct gss_ctx *ctx_id, | 46 | struct gss_ctx *ctx_id, |
| 48 | struct xdr_buf *message, | 47 | struct xdr_buf *message, |
| 49 | struct xdr_netobj *mic_token, | 48 | struct xdr_netobj *mic_token); |
| 50 | u32 *qstate); | 49 | u32 gss_wrap( |
| 50 | struct gss_ctx *ctx_id, | ||
| 51 | int offset, | ||
| 52 | struct xdr_buf *outbuf, | ||
| 53 | struct page **inpages); | ||
| 54 | u32 gss_unwrap( | ||
| 55 | struct gss_ctx *ctx_id, | ||
| 56 | int offset, | ||
| 57 | struct xdr_buf *inbuf); | ||
| 51 | u32 gss_delete_sec_context( | 58 | u32 gss_delete_sec_context( |
| 52 | struct gss_ctx **ctx_id); | 59 | struct gss_ctx **ctx_id); |
| 53 | 60 | ||
| @@ -56,7 +63,6 @@ char *gss_service_to_auth_domain_name(struct gss_api_mech *, u32 service); | |||
| 56 | 63 | ||
| 57 | struct pf_desc { | 64 | struct pf_desc { |
| 58 | u32 pseudoflavor; | 65 | u32 pseudoflavor; |
| 59 | u32 qop; | ||
| 60 | u32 service; | 66 | u32 service; |
| 61 | char *name; | 67 | char *name; |
| 62 | char *auth_domain_name; | 68 | char *auth_domain_name; |
| @@ -85,14 +91,21 @@ struct gss_api_ops { | |||
| 85 | struct gss_ctx *ctx_id); | 91 | struct gss_ctx *ctx_id); |
| 86 | u32 (*gss_get_mic)( | 92 | u32 (*gss_get_mic)( |
| 87 | struct gss_ctx *ctx_id, | 93 | struct gss_ctx *ctx_id, |
| 88 | u32 qop, | ||
| 89 | struct xdr_buf *message, | 94 | struct xdr_buf *message, |
| 90 | struct xdr_netobj *mic_token); | 95 | struct xdr_netobj *mic_token); |
| 91 | u32 (*gss_verify_mic)( | 96 | u32 (*gss_verify_mic)( |
| 92 | struct gss_ctx *ctx_id, | 97 | struct gss_ctx *ctx_id, |
| 93 | struct xdr_buf *message, | 98 | struct xdr_buf *message, |
| 94 | struct xdr_netobj *mic_token, | 99 | struct xdr_netobj *mic_token); |
| 95 | u32 *qstate); | 100 | u32 (*gss_wrap)( |
| 101 | struct gss_ctx *ctx_id, | ||
| 102 | int offset, | ||
| 103 | struct xdr_buf *outbuf, | ||
| 104 | struct page **inpages); | ||
| 105 | u32 (*gss_unwrap)( | ||
| 106 | struct gss_ctx *ctx_id, | ||
| 107 | int offset, | ||
| 108 | struct xdr_buf *buf); | ||
| 96 | void (*gss_delete_sec_context)( | 109 | void (*gss_delete_sec_context)( |
| 97 | void *internal_ctx_id); | 110 | void *internal_ctx_id); |
| 98 | }; | 111 | }; |
diff --git a/include/linux/sunrpc/gss_err.h b/include/linux/sunrpc/gss_err.h index 92608a2e574c..a6807867bd21 100644 --- a/include/linux/sunrpc/gss_err.h +++ b/include/linux/sunrpc/gss_err.h | |||
| @@ -66,16 +66,6 @@ typedef unsigned int OM_uint32; | |||
| 66 | 66 | ||
| 67 | 67 | ||
| 68 | /* | 68 | /* |
| 69 | * Define the default Quality of Protection for per-message services. Note | ||
| 70 | * that an implementation that offers multiple levels of QOP may either reserve | ||
| 71 | * a value (for example zero, as assumed here) to mean "default protection", or | ||
| 72 | * alternatively may simply equate GSS_C_QOP_DEFAULT to a specific explicit | ||
| 73 | * QOP value. However a value of 0 should always be interpreted by a GSSAPI | ||
| 74 | * implementation as a request for the default protection level. | ||
| 75 | */ | ||
| 76 | #define GSS_C_QOP_DEFAULT 0 | ||
| 77 | |||
| 78 | /* | ||
| 79 | * Expiration time of 2^32-1 seconds means infinite lifetime for a | 69 | * Expiration time of 2^32-1 seconds means infinite lifetime for a |
| 80 | * credential or security context | 70 | * credential or security context |
| 81 | */ | 71 | */ |
diff --git a/include/linux/sunrpc/gss_krb5.h b/include/linux/sunrpc/gss_krb5.h index ffe31d2eb9ec..2c3601d31045 100644 --- a/include/linux/sunrpc/gss_krb5.h +++ b/include/linux/sunrpc/gss_krb5.h | |||
| @@ -116,18 +116,22 @@ enum seal_alg { | |||
| 116 | 116 | ||
| 117 | s32 | 117 | s32 |
| 118 | make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body, | 118 | make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body, |
| 119 | struct xdr_netobj *cksum); | 119 | int body_offset, struct xdr_netobj *cksum); |
| 120 | |||
| 121 | u32 gss_get_mic_kerberos(struct gss_ctx *, struct xdr_buf *, | ||
| 122 | struct xdr_netobj *); | ||
| 123 | |||
| 124 | u32 gss_verify_mic_kerberos(struct gss_ctx *, struct xdr_buf *, | ||
| 125 | struct xdr_netobj *); | ||
| 120 | 126 | ||
| 121 | u32 | 127 | u32 |
| 122 | krb5_make_token(struct krb5_ctx *context_handle, int qop_req, | 128 | gss_wrap_kerberos(struct gss_ctx *ctx_id, int offset, |
| 123 | struct xdr_buf *input_message_buffer, | 129 | struct xdr_buf *outbuf, struct page **pages); |
| 124 | struct xdr_netobj *output_message_buffer, int toktype); | ||
| 125 | 130 | ||
| 126 | u32 | 131 | u32 |
| 127 | krb5_read_token(struct krb5_ctx *context_handle, | 132 | gss_unwrap_kerberos(struct gss_ctx *ctx_id, int offset, |
| 128 | struct xdr_netobj *input_token_buffer, | 133 | struct xdr_buf *buf); |
| 129 | struct xdr_buf *message_buffer, | 134 | |
| 130 | int *qop_state, int toktype); | ||
| 131 | 135 | ||
| 132 | u32 | 136 | u32 |
| 133 | krb5_encrypt(struct crypto_tfm * key, | 137 | krb5_encrypt(struct crypto_tfm * key, |
| @@ -137,6 +141,13 @@ u32 | |||
| 137 | krb5_decrypt(struct crypto_tfm * key, | 141 | krb5_decrypt(struct crypto_tfm * key, |
| 138 | void *iv, void *in, void *out, int length); | 142 | void *iv, void *in, void *out, int length); |
| 139 | 143 | ||
| 144 | int | ||
| 145 | gss_encrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *outbuf, int offset, | ||
| 146 | struct page **pages); | ||
| 147 | |||
| 148 | int | ||
| 149 | gss_decrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *inbuf, int offset); | ||
| 150 | |||
| 140 | s32 | 151 | s32 |
| 141 | krb5_make_seq_num(struct crypto_tfm * key, | 152 | krb5_make_seq_num(struct crypto_tfm * key, |
| 142 | int direction, | 153 | int direction, |
diff --git a/include/linux/sunrpc/gss_spkm3.h b/include/linux/sunrpc/gss_spkm3.h index b5c9968c3c17..0beb2cf00a84 100644 --- a/include/linux/sunrpc/gss_spkm3.h +++ b/include/linux/sunrpc/gss_spkm3.h | |||
| @@ -41,9 +41,9 @@ struct spkm3_ctx { | |||
| 41 | #define SPKM_WRAP_TOK 5 | 41 | #define SPKM_WRAP_TOK 5 |
| 42 | #define SPKM_DEL_TOK 6 | 42 | #define SPKM_DEL_TOK 6 |
| 43 | 43 | ||
| 44 | u32 spkm3_make_token(struct spkm3_ctx *ctx, int qop_req, struct xdr_buf * text, struct xdr_netobj * token, int toktype); | 44 | u32 spkm3_make_token(struct spkm3_ctx *ctx, struct xdr_buf * text, struct xdr_netobj * token, int toktype); |
| 45 | 45 | ||
| 46 | u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struct xdr_buf *message_buffer, int *qop_state, int toktype); | 46 | u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struct xdr_buf *message_buffer, int toktype); |
| 47 | 47 | ||
| 48 | #define CKSUMTYPE_RSA_MD5 0x0007 | 48 | #define CKSUMTYPE_RSA_MD5 0x0007 |
| 49 | 49 | ||
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 15f115332389..f43f237360ae 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h | |||
| @@ -76,5 +76,30 @@ enum rpc_auth_stat { | |||
| 76 | 76 | ||
| 77 | #define RPC_MAXNETNAMELEN 256 | 77 | #define RPC_MAXNETNAMELEN 256 |
| 78 | 78 | ||
| 79 | /* | ||
| 80 | * From RFC 1831: | ||
| 81 | * | ||
| 82 | * "A record is composed of one or more record fragments. A record | ||
| 83 | * fragment is a four-byte header followed by 0 to (2**31) - 1 bytes of | ||
| 84 | * fragment data. The bytes encode an unsigned binary number; as with | ||
| 85 | * XDR integers, the byte order is from highest to lowest. The number | ||
| 86 | * encodes two values -- a boolean which indicates whether the fragment | ||
| 87 | * is the last fragment of the record (bit value 1 implies the fragment | ||
| 88 | * is the last fragment) and a 31-bit unsigned binary value which is the | ||
| 89 | * length in bytes of the fragment's data. The boolean value is the | ||
| 90 | * highest-order bit of the header; the length is the 31 low-order bits. | ||
| 91 | * (Note that this record specification is NOT in XDR standard form!)" | ||
| 92 | * | ||
| 93 | * The Linux RPC client always sends its requests in a single record | ||
| 94 | * fragment, limiting the maximum payload size for stream transports to | ||
| 95 | * 2GB. | ||
| 96 | */ | ||
| 97 | |||
| 98 | typedef u32 rpc_fraghdr; | ||
| 99 | |||
| 100 | #define RPC_LAST_STREAM_FRAGMENT (1U << 31) | ||
| 101 | #define RPC_FRAGMENT_SIZE_MASK (~RPC_LAST_STREAM_FRAGMENT) | ||
| 102 | #define RPC_MAX_FRAGMENT_SIZE ((1U << 31) - 1) | ||
| 103 | |||
| 79 | #endif /* __KERNEL__ */ | 104 | #endif /* __KERNEL__ */ |
| 80 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ | 105 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 23448d0fb5bc..5da968729cf8 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
| @@ -161,14 +161,10 @@ typedef struct { | |||
| 161 | 161 | ||
| 162 | typedef size_t (*skb_read_actor_t)(skb_reader_t *desc, void *to, size_t len); | 162 | typedef size_t (*skb_read_actor_t)(skb_reader_t *desc, void *to, size_t len); |
| 163 | 163 | ||
| 164 | extern int csum_partial_copy_to_xdr(struct xdr_buf *, struct sk_buff *); | ||
| 164 | extern ssize_t xdr_partial_copy_from_skb(struct xdr_buf *, unsigned int, | 165 | extern ssize_t xdr_partial_copy_from_skb(struct xdr_buf *, unsigned int, |
| 165 | skb_reader_t *, skb_read_actor_t); | 166 | skb_reader_t *, skb_read_actor_t); |
| 166 | 167 | ||
| 167 | struct socket; | ||
| 168 | struct sockaddr; | ||
| 169 | extern int xdr_sendpages(struct socket *, struct sockaddr *, int, | ||
| 170 | struct xdr_buf *, unsigned int, int); | ||
| 171 | |||
| 172 | extern int xdr_encode_word(struct xdr_buf *, int, u32); | 168 | extern int xdr_encode_word(struct xdr_buf *, int, u32); |
| 173 | extern int xdr_decode_word(struct xdr_buf *, int, u32 *); | 169 | extern int xdr_decode_word(struct xdr_buf *, int, u32 *); |
| 174 | 170 | ||
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index e618c1649814..3b8b6e823c70 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/include/linux/sunrpc/clnt_xprt.h | 2 | * linux/include/linux/sunrpc/xprt.h |
| 3 | * | 3 | * |
| 4 | * Declarations for the RPC transport interface. | 4 | * Declarations for the RPC transport interface. |
| 5 | * | 5 | * |
| @@ -15,20 +15,6 @@ | |||
| 15 | #include <linux/sunrpc/sched.h> | 15 | #include <linux/sunrpc/sched.h> |
| 16 | #include <linux/sunrpc/xdr.h> | 16 | #include <linux/sunrpc/xdr.h> |
| 17 | 17 | ||
| 18 | /* | ||
| 19 | * The transport code maintains an estimate on the maximum number of out- | ||
| 20 | * standing RPC requests, using a smoothed version of the congestion | ||
| 21 | * avoidance implemented in 44BSD. This is basically the Van Jacobson | ||
| 22 | * congestion algorithm: If a retransmit occurs, the congestion window is | ||
| 23 | * halved; otherwise, it is incremented by 1/cwnd when | ||
| 24 | * | ||
| 25 | * - a reply is received and | ||
| 26 | * - a full number of requests are outstanding and | ||
| 27 | * - the congestion window hasn't been updated recently. | ||
| 28 | * | ||
| 29 | * Upper procedures may check whether a request would block waiting for | ||
| 30 | * a free RPC slot by using the RPC_CONGESTED() macro. | ||
| 31 | */ | ||
| 32 | extern unsigned int xprt_udp_slot_table_entries; | 18 | extern unsigned int xprt_udp_slot_table_entries; |
| 33 | extern unsigned int xprt_tcp_slot_table_entries; | 19 | extern unsigned int xprt_tcp_slot_table_entries; |
| 34 | 20 | ||
| @@ -36,34 +22,23 @@ extern unsigned int xprt_tcp_slot_table_entries; | |||
| 36 | #define RPC_DEF_SLOT_TABLE (16U) | 22 | #define RPC_DEF_SLOT_TABLE (16U) |
| 37 | #define RPC_MAX_SLOT_TABLE (128U) | 23 | #define RPC_MAX_SLOT_TABLE (128U) |
| 38 | 24 | ||
| 39 | #define RPC_CWNDSHIFT (8U) | ||
| 40 | #define RPC_CWNDSCALE (1U << RPC_CWNDSHIFT) | ||
| 41 | #define RPC_INITCWND RPC_CWNDSCALE | ||
| 42 | #define RPC_MAXCWND(xprt) ((xprt)->max_reqs << RPC_CWNDSHIFT) | ||
| 43 | #define RPCXPRT_CONGESTED(xprt) ((xprt)->cong >= (xprt)->cwnd) | ||
| 44 | |||
| 45 | /* Default timeout values */ | ||
| 46 | #define RPC_MAX_UDP_TIMEOUT (60*HZ) | ||
| 47 | #define RPC_MAX_TCP_TIMEOUT (600*HZ) | ||
| 48 | |||
| 49 | /* | 25 | /* |
| 50 | * Wait duration for an RPC TCP connection to be established. Solaris | 26 | * RPC call and reply header size as number of 32bit words (verifier |
| 51 | * NFS over TCP uses 60 seconds, for example, which is in line with how | 27 | * size computed separately) |
| 52 | * long a server takes to reboot. | ||
| 53 | */ | 28 | */ |
| 54 | #define RPC_CONNECT_TIMEOUT (60*HZ) | 29 | #define RPC_CALLHDRSIZE 6 |
| 30 | #define RPC_REPHDRSIZE 4 | ||
| 55 | 31 | ||
| 56 | /* | 32 | /* |
| 57 | * Delay an arbitrary number of seconds before attempting to reconnect | 33 | * Parameters for choosing a free port |
| 58 | * after an error. | ||
| 59 | */ | 34 | */ |
| 60 | #define RPC_REESTABLISH_TIMEOUT (15*HZ) | 35 | extern unsigned int xprt_min_resvport; |
| 36 | extern unsigned int xprt_max_resvport; | ||
| 61 | 37 | ||
| 62 | /* RPC call and reply header size as number of 32bit words (verifier | 38 | #define RPC_MIN_RESVPORT (1U) |
| 63 | * size computed separately) | 39 | #define RPC_MAX_RESVPORT (65535U) |
| 64 | */ | 40 | #define RPC_DEF_MIN_RESVPORT (650U) |
| 65 | #define RPC_CALLHDRSIZE 6 | 41 | #define RPC_DEF_MAX_RESVPORT (1023U) |
| 66 | #define RPC_REPHDRSIZE 4 | ||
| 67 | 42 | ||
| 68 | /* | 43 | /* |
| 69 | * This describes a timeout strategy | 44 | * This describes a timeout strategy |
| @@ -76,6 +51,9 @@ struct rpc_timeout { | |||
| 76 | unsigned char to_exponential; | 51 | unsigned char to_exponential; |
| 77 | }; | 52 | }; |
| 78 | 53 | ||
| 54 | struct rpc_task; | ||
| 55 | struct rpc_xprt; | ||
| 56 | |||
| 79 | /* | 57 | /* |
| 80 | * This describes a complete RPC request | 58 | * This describes a complete RPC request |
| 81 | */ | 59 | */ |
| @@ -95,7 +73,10 @@ struct rpc_rqst { | |||
| 95 | int rq_cong; /* has incremented xprt->cong */ | 73 | int rq_cong; /* has incremented xprt->cong */ |
| 96 | int rq_received; /* receive completed */ | 74 | int rq_received; /* receive completed */ |
| 97 | u32 rq_seqno; /* gss seq no. used on req. */ | 75 | u32 rq_seqno; /* gss seq no. used on req. */ |
| 98 | 76 | int rq_enc_pages_num; | |
| 77 | struct page **rq_enc_pages; /* scratch pages for use by | ||
| 78 | gss privacy code */ | ||
| 79 | void (*rq_release_snd_buf)(struct rpc_rqst *); /* release rq_enc_pages */ | ||
| 99 | struct list_head rq_list; | 80 | struct list_head rq_list; |
| 100 | 81 | ||
| 101 | struct xdr_buf rq_private_buf; /* The receive buffer | 82 | struct xdr_buf rq_private_buf; /* The receive buffer |
| @@ -121,12 +102,21 @@ struct rpc_rqst { | |||
| 121 | #define rq_svec rq_snd_buf.head | 102 | #define rq_svec rq_snd_buf.head |
| 122 | #define rq_slen rq_snd_buf.len | 103 | #define rq_slen rq_snd_buf.len |
| 123 | 104 | ||
| 124 | #define XPRT_LAST_FRAG (1 << 0) | 105 | struct rpc_xprt_ops { |
| 125 | #define XPRT_COPY_RECM (1 << 1) | 106 | void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize); |
| 126 | #define XPRT_COPY_XID (1 << 2) | 107 | int (*reserve_xprt)(struct rpc_task *task); |
| 127 | #define XPRT_COPY_DATA (1 << 3) | 108 | void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); |
| 109 | void (*connect)(struct rpc_task *task); | ||
| 110 | int (*send_request)(struct rpc_task *task); | ||
| 111 | void (*set_retrans_timeout)(struct rpc_task *task); | ||
| 112 | void (*timer)(struct rpc_task *task); | ||
| 113 | void (*release_request)(struct rpc_task *task); | ||
| 114 | void (*close)(struct rpc_xprt *xprt); | ||
| 115 | void (*destroy)(struct rpc_xprt *xprt); | ||
| 116 | }; | ||
| 128 | 117 | ||
| 129 | struct rpc_xprt { | 118 | struct rpc_xprt { |
| 119 | struct rpc_xprt_ops * ops; /* transport methods */ | ||
| 130 | struct socket * sock; /* BSD socket layer */ | 120 | struct socket * sock; /* BSD socket layer */ |
| 131 | struct sock * inet; /* INET layer */ | 121 | struct sock * inet; /* INET layer */ |
| 132 | 122 | ||
| @@ -137,11 +127,13 @@ struct rpc_xprt { | |||
| 137 | unsigned long cong; /* current congestion */ | 127 | unsigned long cong; /* current congestion */ |
| 138 | unsigned long cwnd; /* congestion window */ | 128 | unsigned long cwnd; /* congestion window */ |
| 139 | 129 | ||
| 140 | unsigned int rcvsize, /* socket receive buffer size */ | 130 | size_t rcvsize, /* transport rcv buffer size */ |
| 141 | sndsize; /* socket send buffer size */ | 131 | sndsize; /* transport send buffer size */ |
| 142 | 132 | ||
| 143 | size_t max_payload; /* largest RPC payload size, | 133 | size_t max_payload; /* largest RPC payload size, |
| 144 | in bytes */ | 134 | in bytes */ |
| 135 | unsigned int tsh_size; /* size of transport specific | ||
| 136 | header */ | ||
| 145 | 137 | ||
| 146 | struct rpc_wait_queue sending; /* requests waiting to send */ | 138 | struct rpc_wait_queue sending; /* requests waiting to send */ |
| 147 | struct rpc_wait_queue resend; /* requests waiting to resend */ | 139 | struct rpc_wait_queue resend; /* requests waiting to resend */ |
| @@ -150,11 +142,9 @@ struct rpc_xprt { | |||
| 150 | struct list_head free; /* free slots */ | 142 | struct list_head free; /* free slots */ |
| 151 | struct rpc_rqst * slot; /* slot table storage */ | 143 | struct rpc_rqst * slot; /* slot table storage */ |
| 152 | unsigned int max_reqs; /* total slots */ | 144 | unsigned int max_reqs; /* total slots */ |
| 153 | unsigned long sockstate; /* Socket state */ | 145 | unsigned long state; /* transport state */ |
| 154 | unsigned char shutdown : 1, /* being shut down */ | 146 | unsigned char shutdown : 1, /* being shut down */ |
| 155 | nocong : 1, /* no congestion control */ | 147 | resvport : 1; /* use a reserved port */ |
| 156 | resvport : 1, /* use a reserved port */ | ||
| 157 | stream : 1; /* TCP */ | ||
| 158 | 148 | ||
| 159 | /* | 149 | /* |
| 160 | * XID | 150 | * XID |
| @@ -171,22 +161,27 @@ struct rpc_xprt { | |||
| 171 | unsigned long tcp_copied, /* copied to request */ | 161 | unsigned long tcp_copied, /* copied to request */ |
| 172 | tcp_flags; | 162 | tcp_flags; |
| 173 | /* | 163 | /* |
| 174 | * Connection of sockets | 164 | * Connection of transports |
| 175 | */ | 165 | */ |
| 176 | struct work_struct sock_connect; | 166 | unsigned long connect_timeout, |
| 167 | bind_timeout, | ||
| 168 | reestablish_timeout; | ||
| 169 | struct work_struct connect_worker; | ||
| 177 | unsigned short port; | 170 | unsigned short port; |
| 171 | |||
| 178 | /* | 172 | /* |
| 179 | * Disconnection of idle sockets | 173 | * Disconnection of idle transports |
| 180 | */ | 174 | */ |
| 181 | struct work_struct task_cleanup; | 175 | struct work_struct task_cleanup; |
| 182 | struct timer_list timer; | 176 | struct timer_list timer; |
| 183 | unsigned long last_used; | 177 | unsigned long last_used, |
| 178 | idle_timeout; | ||
| 184 | 179 | ||
| 185 | /* | 180 | /* |
| 186 | * Send stuff | 181 | * Send stuff |
| 187 | */ | 182 | */ |
| 188 | spinlock_t sock_lock; /* lock socket info */ | 183 | spinlock_t transport_lock; /* lock transport info */ |
| 189 | spinlock_t xprt_lock; /* lock xprt info */ | 184 | spinlock_t reserve_lock; /* lock slot table */ |
| 190 | struct rpc_task * snd_task; /* Task blocked in send */ | 185 | struct rpc_task * snd_task; /* Task blocked in send */ |
| 191 | 186 | ||
| 192 | struct list_head recv; | 187 | struct list_head recv; |
| @@ -195,37 +190,111 @@ struct rpc_xprt { | |||
| 195 | void (*old_data_ready)(struct sock *, int); | 190 | void (*old_data_ready)(struct sock *, int); |
| 196 | void (*old_state_change)(struct sock *); | 191 | void (*old_state_change)(struct sock *); |
| 197 | void (*old_write_space)(struct sock *); | 192 | void (*old_write_space)(struct sock *); |
| 198 | |||
| 199 | wait_queue_head_t cong_wait; | ||
| 200 | }; | 193 | }; |
| 201 | 194 | ||
| 195 | #define XPRT_LAST_FRAG (1 << 0) | ||
| 196 | #define XPRT_COPY_RECM (1 << 1) | ||
| 197 | #define XPRT_COPY_XID (1 << 2) | ||
| 198 | #define XPRT_COPY_DATA (1 << 3) | ||
| 199 | |||
| 202 | #ifdef __KERNEL__ | 200 | #ifdef __KERNEL__ |
| 203 | 201 | ||
| 204 | struct rpc_xprt * xprt_create_proto(int proto, struct sockaddr_in *addr, | 202 | /* |
| 205 | struct rpc_timeout *toparms); | 203 | * Transport operations used by ULPs |
| 206 | int xprt_destroy(struct rpc_xprt *); | 204 | */ |
| 207 | void xprt_set_timeout(struct rpc_timeout *, unsigned int, | 205 | struct rpc_xprt * xprt_create_proto(int proto, struct sockaddr_in *addr, struct rpc_timeout *to); |
| 208 | unsigned long); | 206 | void xprt_set_timeout(struct rpc_timeout *to, unsigned int retr, unsigned long incr); |
| 209 | 207 | ||
| 210 | void xprt_reserve(struct rpc_task *); | 208 | /* |
| 211 | int xprt_prepare_transmit(struct rpc_task *); | 209 | * Generic internal transport functions |
| 212 | void xprt_transmit(struct rpc_task *); | 210 | */ |
| 213 | void xprt_receive(struct rpc_task *); | 211 | void xprt_connect(struct rpc_task *task); |
| 212 | void xprt_reserve(struct rpc_task *task); | ||
| 213 | int xprt_reserve_xprt(struct rpc_task *task); | ||
| 214 | int xprt_reserve_xprt_cong(struct rpc_task *task); | ||
| 215 | int xprt_prepare_transmit(struct rpc_task *task); | ||
| 216 | void xprt_transmit(struct rpc_task *task); | ||
| 217 | void xprt_abort_transmit(struct rpc_task *task); | ||
| 214 | int xprt_adjust_timeout(struct rpc_rqst *req); | 218 | int xprt_adjust_timeout(struct rpc_rqst *req); |
| 215 | void xprt_release(struct rpc_task *); | 219 | void xprt_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task); |
| 216 | void xprt_connect(struct rpc_task *); | 220 | void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task); |
| 217 | void xprt_sock_setbufsize(struct rpc_xprt *); | 221 | void xprt_release(struct rpc_task *task); |
| 218 | 222 | int xprt_destroy(struct rpc_xprt *xprt); | |
| 219 | #define XPRT_LOCKED 0 | 223 | |
| 220 | #define XPRT_CONNECT 1 | 224 | static inline u32 *xprt_skip_transport_header(struct rpc_xprt *xprt, u32 *p) |
| 221 | #define XPRT_CONNECTING 2 | 225 | { |
| 222 | 226 | return p + xprt->tsh_size; | |
| 223 | #define xprt_connected(xp) (test_bit(XPRT_CONNECT, &(xp)->sockstate)) | 227 | } |
| 224 | #define xprt_set_connected(xp) (set_bit(XPRT_CONNECT, &(xp)->sockstate)) | 228 | |
| 225 | #define xprt_test_and_set_connected(xp) (test_and_set_bit(XPRT_CONNECT, &(xp)->sockstate)) | 229 | /* |
| 226 | #define xprt_test_and_clear_connected(xp) \ | 230 | * Transport switch helper functions |
| 227 | (test_and_clear_bit(XPRT_CONNECT, &(xp)->sockstate)) | 231 | */ |
| 228 | #define xprt_clear_connected(xp) (clear_bit(XPRT_CONNECT, &(xp)->sockstate)) | 232 | void xprt_set_retrans_timeout_def(struct rpc_task *task); |
| 233 | void xprt_set_retrans_timeout_rtt(struct rpc_task *task); | ||
| 234 | void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status); | ||
| 235 | void xprt_wait_for_buffer_space(struct rpc_task *task); | ||
| 236 | void xprt_write_space(struct rpc_xprt *xprt); | ||
| 237 | void xprt_update_rtt(struct rpc_task *task); | ||
| 238 | void xprt_adjust_cwnd(struct rpc_task *task, int result); | ||
| 239 | struct rpc_rqst * xprt_lookup_rqst(struct rpc_xprt *xprt, u32 xid); | ||
| 240 | void xprt_complete_rqst(struct rpc_task *task, int copied); | ||
| 241 | void xprt_release_rqst_cong(struct rpc_task *task); | ||
| 242 | void xprt_disconnect(struct rpc_xprt *xprt); | ||
| 243 | |||
| 244 | /* | ||
| 245 | * Socket transport setup operations | ||
| 246 | */ | ||
| 247 | int xs_setup_udp(struct rpc_xprt *xprt, struct rpc_timeout *to); | ||
| 248 | int xs_setup_tcp(struct rpc_xprt *xprt, struct rpc_timeout *to); | ||
| 249 | |||
| 250 | /* | ||
| 251 | * Reserved bit positions in xprt->state | ||
| 252 | */ | ||
| 253 | #define XPRT_LOCKED (0) | ||
| 254 | #define XPRT_CONNECTED (1) | ||
| 255 | #define XPRT_CONNECTING (2) | ||
| 256 | |||
| 257 | static inline void xprt_set_connected(struct rpc_xprt *xprt) | ||
| 258 | { | ||
| 259 | set_bit(XPRT_CONNECTED, &xprt->state); | ||
| 260 | } | ||
| 261 | |||
| 262 | static inline void xprt_clear_connected(struct rpc_xprt *xprt) | ||
| 263 | { | ||
| 264 | clear_bit(XPRT_CONNECTED, &xprt->state); | ||
| 265 | } | ||
| 266 | |||
| 267 | static inline int xprt_connected(struct rpc_xprt *xprt) | ||
| 268 | { | ||
| 269 | return test_bit(XPRT_CONNECTED, &xprt->state); | ||
| 270 | } | ||
| 271 | |||
| 272 | static inline int xprt_test_and_set_connected(struct rpc_xprt *xprt) | ||
| 273 | { | ||
| 274 | return test_and_set_bit(XPRT_CONNECTED, &xprt->state); | ||
| 275 | } | ||
| 276 | |||
| 277 | static inline int xprt_test_and_clear_connected(struct rpc_xprt *xprt) | ||
| 278 | { | ||
| 279 | return test_and_clear_bit(XPRT_CONNECTED, &xprt->state); | ||
| 280 | } | ||
| 281 | |||
| 282 | static inline void xprt_clear_connecting(struct rpc_xprt *xprt) | ||
| 283 | { | ||
| 284 | smp_mb__before_clear_bit(); | ||
| 285 | clear_bit(XPRT_CONNECTING, &xprt->state); | ||
| 286 | smp_mb__after_clear_bit(); | ||
| 287 | } | ||
| 288 | |||
| 289 | static inline int xprt_connecting(struct rpc_xprt *xprt) | ||
| 290 | { | ||
| 291 | return test_bit(XPRT_CONNECTING, &xprt->state); | ||
| 292 | } | ||
| 293 | |||
| 294 | static inline int xprt_test_and_set_connecting(struct rpc_xprt *xprt) | ||
| 295 | { | ||
| 296 | return test_and_set_bit(XPRT_CONNECTING, &xprt->state); | ||
| 297 | } | ||
| 229 | 298 | ||
| 230 | #endif /* __KERNEL__*/ | 299 | #endif /* __KERNEL__*/ |
| 231 | 300 | ||
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index ad15a54806d8..ba448c760168 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
| @@ -71,7 +71,7 @@ void restore_processor_state(void); | |||
| 71 | struct saved_context; | 71 | struct saved_context; |
| 72 | void __save_processor_state(struct saved_context *ctxt); | 72 | void __save_processor_state(struct saved_context *ctxt); |
| 73 | void __restore_processor_state(struct saved_context *ctxt); | 73 | void __restore_processor_state(struct saved_context *ctxt); |
| 74 | extern unsigned long get_usable_page(unsigned gfp_mask); | 74 | extern unsigned long get_usable_page(gfp_t gfp_mask); |
| 75 | extern void free_eaten_memory(void); | 75 | extern void free_eaten_memory(void); |
| 76 | 76 | ||
| 77 | #endif /* _LINUX_SWSUSP_H */ | 77 | #endif /* _LINUX_SWSUSP_H */ |
diff --git a/include/linux/swap.h b/include/linux/swap.h index a7bf1a3b1496..20c975642cab 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -171,8 +171,8 @@ extern int rotate_reclaimable_page(struct page *page); | |||
| 171 | extern void swap_setup(void); | 171 | extern void swap_setup(void); |
| 172 | 172 | ||
| 173 | /* linux/mm/vmscan.c */ | 173 | /* linux/mm/vmscan.c */ |
| 174 | extern int try_to_free_pages(struct zone **, unsigned int); | 174 | extern int try_to_free_pages(struct zone **, gfp_t); |
| 175 | extern int zone_reclaim(struct zone *, unsigned int, unsigned int); | 175 | extern int zone_reclaim(struct zone *, gfp_t, unsigned int); |
| 176 | extern int shrink_all_memory(int); | 176 | extern int shrink_all_memory(int); |
| 177 | extern int vm_swappiness; | 177 | extern int vm_swappiness; |
| 178 | 178 | ||
diff --git a/include/linux/textsearch.h b/include/linux/textsearch.h index 515046d1b2f4..fc5bb4e91a58 100644 --- a/include/linux/textsearch.h +++ b/include/linux/textsearch.h | |||
| @@ -40,7 +40,7 @@ struct ts_state | |||
| 40 | struct ts_ops | 40 | struct ts_ops |
| 41 | { | 41 | { |
| 42 | const char *name; | 42 | const char *name; |
| 43 | struct ts_config * (*init)(const void *, unsigned int, int); | 43 | struct ts_config * (*init)(const void *, unsigned int, gfp_t); |
| 44 | unsigned int (*find)(struct ts_config *, | 44 | unsigned int (*find)(struct ts_config *, |
| 45 | struct ts_state *); | 45 | struct ts_state *); |
| 46 | void (*destroy)(struct ts_config *); | 46 | void (*destroy)(struct ts_config *); |
| @@ -148,7 +148,7 @@ static inline unsigned int textsearch_get_pattern_len(struct ts_config *conf) | |||
| 148 | extern int textsearch_register(struct ts_ops *); | 148 | extern int textsearch_register(struct ts_ops *); |
| 149 | extern int textsearch_unregister(struct ts_ops *); | 149 | extern int textsearch_unregister(struct ts_ops *); |
| 150 | extern struct ts_config *textsearch_prepare(const char *, const void *, | 150 | extern struct ts_config *textsearch_prepare(const char *, const void *, |
| 151 | unsigned int, int, int); | 151 | unsigned int, gfp_t, int); |
| 152 | extern void textsearch_destroy(struct ts_config *conf); | 152 | extern void textsearch_destroy(struct ts_config *conf); |
| 153 | extern unsigned int textsearch_find_continuous(struct ts_config *, | 153 | extern unsigned int textsearch_find_continuous(struct ts_config *, |
| 154 | struct ts_state *, | 154 | struct ts_state *, |
diff --git a/include/linux/types.h b/include/linux/types.h index 0aee34f9da9f..21b9ce803644 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
| @@ -151,7 +151,12 @@ typedef unsigned long sector_t; | |||
| 151 | */ | 151 | */ |
| 152 | 152 | ||
| 153 | #ifdef __CHECKER__ | 153 | #ifdef __CHECKER__ |
| 154 | #define __bitwise __attribute__((bitwise)) | 154 | #define __bitwise__ __attribute__((bitwise)) |
| 155 | #else | ||
| 156 | #define __bitwise__ | ||
| 157 | #endif | ||
| 158 | #ifdef __CHECK_ENDIAN__ | ||
| 159 | #define __bitwise __bitwise__ | ||
| 155 | #else | 160 | #else |
| 156 | #define __bitwise | 161 | #define __bitwise |
| 157 | #endif | 162 | #endif |
| @@ -166,7 +171,7 @@ typedef __u64 __bitwise __be64; | |||
| 166 | #endif | 171 | #endif |
| 167 | 172 | ||
| 168 | #ifdef __KERNEL__ | 173 | #ifdef __KERNEL__ |
| 169 | typedef unsigned __nocast gfp_t; | 174 | typedef unsigned __bitwise__ gfp_t; |
| 170 | #endif | 175 | #endif |
| 171 | 176 | ||
| 172 | struct ustat { | 177 | struct ustat { |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 4dbe580f9335..8f731e8f2821 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -933,17 +933,17 @@ static inline void usb_fill_int_urb (struct urb *urb, | |||
| 933 | } | 933 | } |
| 934 | 934 | ||
| 935 | extern void usb_init_urb(struct urb *urb); | 935 | extern void usb_init_urb(struct urb *urb); |
| 936 | extern struct urb *usb_alloc_urb(int iso_packets, unsigned mem_flags); | 936 | extern struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags); |
| 937 | extern void usb_free_urb(struct urb *urb); | 937 | extern void usb_free_urb(struct urb *urb); |
| 938 | #define usb_put_urb usb_free_urb | 938 | #define usb_put_urb usb_free_urb |
| 939 | extern struct urb *usb_get_urb(struct urb *urb); | 939 | extern struct urb *usb_get_urb(struct urb *urb); |
| 940 | extern int usb_submit_urb(struct urb *urb, unsigned mem_flags); | 940 | extern int usb_submit_urb(struct urb *urb, gfp_t mem_flags); |
| 941 | extern int usb_unlink_urb(struct urb *urb); | 941 | extern int usb_unlink_urb(struct urb *urb); |
| 942 | extern void usb_kill_urb(struct urb *urb); | 942 | extern void usb_kill_urb(struct urb *urb); |
| 943 | 943 | ||
| 944 | #define HAVE_USB_BUFFERS | 944 | #define HAVE_USB_BUFFERS |
| 945 | void *usb_buffer_alloc (struct usb_device *dev, size_t size, | 945 | void *usb_buffer_alloc (struct usb_device *dev, size_t size, |
| 946 | unsigned mem_flags, dma_addr_t *dma); | 946 | gfp_t mem_flags, dma_addr_t *dma); |
| 947 | void usb_buffer_free (struct usb_device *dev, size_t size, | 947 | void usb_buffer_free (struct usb_device *dev, size_t size, |
| 948 | void *addr, dma_addr_t dma); | 948 | void *addr, dma_addr_t dma); |
| 949 | 949 | ||
| @@ -1050,7 +1050,7 @@ int usb_sg_init ( | |||
| 1050 | struct scatterlist *sg, | 1050 | struct scatterlist *sg, |
| 1051 | int nents, | 1051 | int nents, |
| 1052 | size_t length, | 1052 | size_t length, |
| 1053 | unsigned mem_flags | 1053 | gfp_t mem_flags |
| 1054 | ); | 1054 | ); |
| 1055 | void usb_sg_cancel (struct usb_sg_request *io); | 1055 | void usb_sg_cancel (struct usb_sg_request *io); |
| 1056 | void usb_sg_wait (struct usb_sg_request *io); | 1056 | void usb_sg_wait (struct usb_sg_request *io); |
diff --git a/include/linux/usb_gadget.h b/include/linux/usb_gadget.h index 71e608607324..ff81117eb733 100644 --- a/include/linux/usb_gadget.h +++ b/include/linux/usb_gadget.h | |||
| @@ -107,18 +107,18 @@ struct usb_ep_ops { | |||
| 107 | int (*disable) (struct usb_ep *ep); | 107 | int (*disable) (struct usb_ep *ep); |
| 108 | 108 | ||
| 109 | struct usb_request *(*alloc_request) (struct usb_ep *ep, | 109 | struct usb_request *(*alloc_request) (struct usb_ep *ep, |
| 110 | unsigned gfp_flags); | 110 | gfp_t gfp_flags); |
| 111 | void (*free_request) (struct usb_ep *ep, struct usb_request *req); | 111 | void (*free_request) (struct usb_ep *ep, struct usb_request *req); |
| 112 | 112 | ||
| 113 | void *(*alloc_buffer) (struct usb_ep *ep, unsigned bytes, | 113 | void *(*alloc_buffer) (struct usb_ep *ep, unsigned bytes, |
| 114 | dma_addr_t *dma, unsigned gfp_flags); | 114 | dma_addr_t *dma, gfp_t gfp_flags); |
| 115 | void (*free_buffer) (struct usb_ep *ep, void *buf, dma_addr_t dma, | 115 | void (*free_buffer) (struct usb_ep *ep, void *buf, dma_addr_t dma, |
| 116 | unsigned bytes); | 116 | unsigned bytes); |
| 117 | // NOTE: on 2.6, drivers may also use dma_map() and | 117 | // NOTE: on 2.6, drivers may also use dma_map() and |
| 118 | // dma_sync_single_*() to directly manage dma overhead. | 118 | // dma_sync_single_*() to directly manage dma overhead. |
| 119 | 119 | ||
| 120 | int (*queue) (struct usb_ep *ep, struct usb_request *req, | 120 | int (*queue) (struct usb_ep *ep, struct usb_request *req, |
| 121 | unsigned gfp_flags); | 121 | gfp_t gfp_flags); |
| 122 | int (*dequeue) (struct usb_ep *ep, struct usb_request *req); | 122 | int (*dequeue) (struct usb_ep *ep, struct usb_request *req); |
| 123 | 123 | ||
| 124 | int (*set_halt) (struct usb_ep *ep, int value); | 124 | int (*set_halt) (struct usb_ep *ep, int value); |
| @@ -214,7 +214,7 @@ usb_ep_disable (struct usb_ep *ep) | |||
| 214 | * Returns the request, or null if one could not be allocated. | 214 | * Returns the request, or null if one could not be allocated. |
| 215 | */ | 215 | */ |
| 216 | static inline struct usb_request * | 216 | static inline struct usb_request * |
| 217 | usb_ep_alloc_request (struct usb_ep *ep, unsigned gfp_flags) | 217 | usb_ep_alloc_request (struct usb_ep *ep, gfp_t gfp_flags) |
| 218 | { | 218 | { |
| 219 | return ep->ops->alloc_request (ep, gfp_flags); | 219 | return ep->ops->alloc_request (ep, gfp_flags); |
| 220 | } | 220 | } |
| @@ -254,7 +254,7 @@ usb_ep_free_request (struct usb_ep *ep, struct usb_request *req) | |||
| 254 | */ | 254 | */ |
| 255 | static inline void * | 255 | static inline void * |
| 256 | usb_ep_alloc_buffer (struct usb_ep *ep, unsigned len, dma_addr_t *dma, | 256 | usb_ep_alloc_buffer (struct usb_ep *ep, unsigned len, dma_addr_t *dma, |
| 257 | unsigned gfp_flags) | 257 | gfp_t gfp_flags) |
| 258 | { | 258 | { |
| 259 | return ep->ops->alloc_buffer (ep, len, dma, gfp_flags); | 259 | return ep->ops->alloc_buffer (ep, len, dma, gfp_flags); |
| 260 | } | 260 | } |
| @@ -330,7 +330,7 @@ usb_ep_free_buffer (struct usb_ep *ep, void *buf, dma_addr_t dma, unsigned len) | |||
| 330 | * reported when the usb peripheral is disconnected. | 330 | * reported when the usb peripheral is disconnected. |
| 331 | */ | 331 | */ |
| 332 | static inline int | 332 | static inline int |
| 333 | usb_ep_queue (struct usb_ep *ep, struct usb_request *req, unsigned gfp_flags) | 333 | usb_ep_queue (struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags) |
| 334 | { | 334 | { |
| 335 | return ep->ops->queue (ep, req, gfp_flags); | 335 | return ep->ops->queue (ep, req, gfp_flags); |
| 336 | } | 336 | } |
diff --git a/include/linux/wanpipe.h b/include/linux/wanpipe.h index 167d956c492b..dae9860091dd 100644 --- a/include/linux/wanpipe.h +++ b/include/linux/wanpipe.h | |||
| @@ -265,15 +265,6 @@ typedef struct { | |||
| 265 | #include <linux/tty_driver.h> | 265 | #include <linux/tty_driver.h> |
| 266 | #include <linux/tty_flip.h> | 266 | #include <linux/tty_flip.h> |
| 267 | 267 | ||
| 268 | |||
| 269 | #define is_digit(ch) (((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')?1:0) | ||
| 270 | #define is_alpha(ch) ((((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'z')||\ | ||
| 271 | ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'Z'))?1:0) | ||
| 272 | #define is_hex_digit(ch) ((((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')||\ | ||
| 273 | ((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'f')||\ | ||
| 274 | ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'F'))?1:0) | ||
| 275 | |||
| 276 | |||
| 277 | /****** Data Structures *****************************************************/ | 268 | /****** Data Structures *****************************************************/ |
| 278 | 269 | ||
| 279 | /* Adapter Data Space. | 270 | /* Adapter Data Space. |
diff --git a/include/linux/x1205.h b/include/linux/x1205.h new file mode 100644 index 000000000000..64fd3af894a5 --- /dev/null +++ b/include/linux/x1205.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* | ||
| 2 | * x1205.h - defines for drivers/i2c/chips/x1205.c | ||
| 3 | * Copyright 2004 Karen Spearel | ||
| 4 | * Copyright 2005 Alessandro Zummo | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef __LINUX_X1205_H__ | ||
| 13 | #define __LINUX_X1205_H__ | ||
| 14 | |||
| 15 | /* commands */ | ||
| 16 | |||
| 17 | #define X1205_CMD_GETDATETIME 0 | ||
| 18 | #define X1205_CMD_SETTIME 1 | ||
| 19 | #define X1205_CMD_SETDATETIME 2 | ||
| 20 | #define X1205_CMD_GETALARM 3 | ||
| 21 | #define X1205_CMD_SETALARM 4 | ||
| 22 | #define X1205_CMD_GETDTRIM 5 | ||
| 23 | #define X1205_CMD_SETDTRIM 6 | ||
| 24 | #define X1205_CMD_GETATRIM 7 | ||
| 25 | #define X1205_CMD_SETATRIM 8 | ||
| 26 | |||
| 27 | extern int x1205_do_command(unsigned int cmd, void *arg); | ||
| 28 | extern int x1205_direct_attach(int adapter_id, | ||
| 29 | struct i2c_client_address_data *address_data); | ||
| 30 | |||
| 31 | #endif /* __LINUX_X1205_H__ */ | ||
