diff options
Diffstat (limited to 'include')
55 files changed, 1046 insertions, 401 deletions
diff --git a/include/asm-generic/ioctls.h b/include/asm-generic/ioctls.h index 8554cb6a81b9..a3216655d657 100644 --- a/include/asm-generic/ioctls.h +++ b/include/asm-generic/ioctls.h | |||
| @@ -62,7 +62,9 @@ | |||
| 62 | #define TCSETSW2 _IOW('T', 0x2C, struct termios2) | 62 | #define TCSETSW2 _IOW('T', 0x2C, struct termios2) |
| 63 | #define TCSETSF2 _IOW('T', 0x2D, struct termios2) | 63 | #define TCSETSF2 _IOW('T', 0x2D, struct termios2) |
| 64 | #define TIOCGRS485 0x542E | 64 | #define TIOCGRS485 0x542E |
| 65 | #ifndef TIOCSRS485 | ||
| 65 | #define TIOCSRS485 0x542F | 66 | #define TIOCSRS485 0x542F |
| 67 | #endif | ||
| 66 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ | 68 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ |
| 67 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ | 69 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ |
| 68 | #define TCGETX 0x5432 /* SYS5 TCGETX compatibility */ | 70 | #define TCGETX 0x5432 /* SYS5 TCGETX compatibility */ |
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h index 08923b684768..d17784ea37ff 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h | |||
| @@ -55,14 +55,18 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
| 55 | */ | 55 | */ |
| 56 | #define per_cpu(var, cpu) \ | 56 | #define per_cpu(var, cpu) \ |
| 57 | (*SHIFT_PERCPU_PTR(&(var), per_cpu_offset(cpu))) | 57 | (*SHIFT_PERCPU_PTR(&(var), per_cpu_offset(cpu))) |
| 58 | #define __get_cpu_var(var) \ | ||
| 59 | (*SHIFT_PERCPU_PTR(&(var), my_cpu_offset)) | ||
| 60 | #define __raw_get_cpu_var(var) \ | ||
| 61 | (*SHIFT_PERCPU_PTR(&(var), __my_cpu_offset)) | ||
| 62 | 58 | ||
| 63 | #define this_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, my_cpu_offset) | 59 | #ifndef __this_cpu_ptr |
| 64 | #define __this_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset) | 60 | #define __this_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset) |
| 61 | #endif | ||
| 62 | #ifdef CONFIG_DEBUG_PREEMPT | ||
| 63 | #define this_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, my_cpu_offset) | ||
| 64 | #else | ||
| 65 | #define this_cpu_ptr(ptr) __this_cpu_ptr(ptr) | ||
| 66 | #endif | ||
| 65 | 67 | ||
| 68 | #define __get_cpu_var(var) (*this_cpu_ptr(&(var))) | ||
| 69 | #define __raw_get_cpu_var(var) (*__this_cpu_ptr(&(var))) | ||
| 66 | 70 | ||
| 67 | #ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA | 71 | #ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA |
| 68 | extern void setup_per_cpu_areas(void); | 72 | extern void setup_per_cpu_areas(void); |
diff --git a/include/linux/altera_uart.h b/include/linux/altera_uart.h index 8d441064a30d..a10a90791976 100644 --- a/include/linux/altera_uart.h +++ b/include/linux/altera_uart.h | |||
| @@ -5,10 +5,15 @@ | |||
| 5 | #ifndef __ALTUART_H | 5 | #ifndef __ALTUART_H |
| 6 | #define __ALTUART_H | 6 | #define __ALTUART_H |
| 7 | 7 | ||
| 8 | #include <linux/init.h> | ||
| 9 | |||
| 8 | struct altera_uart_platform_uart { | 10 | struct altera_uart_platform_uart { |
| 9 | unsigned long mapbase; /* Physical address base */ | 11 | unsigned long mapbase; /* Physical address base */ |
| 10 | unsigned int irq; /* Interrupt vector */ | 12 | unsigned int irq; /* Interrupt vector */ |
| 11 | unsigned int uartclk; /* UART clock rate */ | 13 | unsigned int uartclk; /* UART clock rate */ |
| 14 | unsigned int bus_shift; /* Bus shift (address stride) */ | ||
| 12 | }; | 15 | }; |
| 13 | 16 | ||
| 17 | int __init early_altera_uart_setup(struct altera_uart_platform_uart *platp); | ||
| 18 | |||
| 14 | #endif /* __ALTUART_H */ | 19 | #endif /* __ALTUART_H */ |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 5274103434ad..ba679992d39b 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -346,8 +346,15 @@ static inline void bvec_kunmap_irq(char *buffer, unsigned long *flags) | |||
| 346 | } | 346 | } |
| 347 | 347 | ||
| 348 | #else | 348 | #else |
| 349 | #define bvec_kmap_irq(bvec, flags) (page_address((bvec)->bv_page) + (bvec)->bv_offset) | 349 | static inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags) |
| 350 | #define bvec_kunmap_irq(buf, flags) do { *(flags) = 0; } while (0) | 350 | { |
| 351 | return page_address(bvec->bv_page) + bvec->bv_offset; | ||
| 352 | } | ||
| 353 | |||
| 354 | static inline void bvec_kunmap_irq(char *buffer, unsigned long *flags) | ||
| 355 | { | ||
| 356 | *flags = 0; | ||
| 357 | } | ||
| 351 | #endif | 358 | #endif |
| 352 | 359 | ||
| 353 | static inline char *__bio_kmap_irq(struct bio *bio, unsigned short idx, | 360 | static inline char *__bio_kmap_irq(struct bio *bio, unsigned short idx, |
| @@ -496,6 +503,10 @@ static inline struct bio *bio_list_get(struct bio_list *bl) | |||
| 496 | #define bip_for_each_vec(bvl, bip, i) \ | 503 | #define bip_for_each_vec(bvl, bip, i) \ |
| 497 | __bip_for_each_vec(bvl, bip, i, (bip)->bip_idx) | 504 | __bip_for_each_vec(bvl, bip, i, (bip)->bip_idx) |
| 498 | 505 | ||
| 506 | #define bio_for_each_integrity_vec(_bvl, _bio, _iter) \ | ||
| 507 | for_each_bio(_bio) \ | ||
| 508 | bip_for_each_vec(_bvl, _bio->bi_integrity, _iter) | ||
| 509 | |||
| 499 | #define bio_integrity(bio) (bio->bi_integrity != NULL) | 510 | #define bio_integrity(bio) (bio->bi_integrity != NULL) |
| 500 | 511 | ||
| 501 | extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *); | 512 | extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *); |
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index ca83a97c9715..0437ab6bb54c 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h | |||
| @@ -97,6 +97,7 @@ struct bio { | |||
| 97 | #define BIO_NULL_MAPPED 9 /* contains invalid user pages */ | 97 | #define BIO_NULL_MAPPED 9 /* contains invalid user pages */ |
| 98 | #define BIO_FS_INTEGRITY 10 /* fs owns integrity data, not block layer */ | 98 | #define BIO_FS_INTEGRITY 10 /* fs owns integrity data, not block layer */ |
| 99 | #define BIO_QUIET 11 /* Make BIO Quiet */ | 99 | #define BIO_QUIET 11 /* Make BIO Quiet */ |
| 100 | #define BIO_MAPPED_INTEGRITY 12/* integrity metadata has been remapped */ | ||
| 100 | #define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag))) | 101 | #define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag))) |
| 101 | 102 | ||
| 102 | /* | 103 | /* |
| @@ -130,6 +131,8 @@ enum rq_flag_bits { | |||
| 130 | /* bio only flags */ | 131 | /* bio only flags */ |
| 131 | __REQ_UNPLUG, /* unplug the immediately after submission */ | 132 | __REQ_UNPLUG, /* unplug the immediately after submission */ |
| 132 | __REQ_RAHEAD, /* read ahead, can fail anytime */ | 133 | __REQ_RAHEAD, /* read ahead, can fail anytime */ |
| 134 | __REQ_THROTTLED, /* This bio has already been subjected to | ||
| 135 | * throttling rules. Don't do it again. */ | ||
| 133 | 136 | ||
| 134 | /* request only flags */ | 137 | /* request only flags */ |
| 135 | __REQ_SORTED, /* elevator knows about this request */ | 138 | __REQ_SORTED, /* elevator knows about this request */ |
| @@ -143,10 +146,8 @@ enum rq_flag_bits { | |||
| 143 | __REQ_FAILED, /* set if the request failed */ | 146 | __REQ_FAILED, /* set if the request failed */ |
| 144 | __REQ_QUIET, /* don't worry about errors */ | 147 | __REQ_QUIET, /* don't worry about errors */ |
| 145 | __REQ_PREEMPT, /* set for "ide_preempt" requests */ | 148 | __REQ_PREEMPT, /* set for "ide_preempt" requests */ |
| 146 | __REQ_ORDERED_COLOR, /* is before or after barrier */ | ||
| 147 | __REQ_ALLOCED, /* request came from our alloc pool */ | 149 | __REQ_ALLOCED, /* request came from our alloc pool */ |
| 148 | __REQ_COPY_USER, /* contains copies of user pages */ | 150 | __REQ_COPY_USER, /* contains copies of user pages */ |
| 149 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ | ||
| 150 | __REQ_FLUSH, /* request for cache flush */ | 151 | __REQ_FLUSH, /* request for cache flush */ |
| 151 | __REQ_IO_STAT, /* account I/O stat */ | 152 | __REQ_IO_STAT, /* account I/O stat */ |
| 152 | __REQ_MIXED_MERGE, /* merge of different types, fail separately */ | 153 | __REQ_MIXED_MERGE, /* merge of different types, fail separately */ |
| @@ -168,10 +169,12 @@ enum rq_flag_bits { | |||
| 168 | (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER) | 169 | (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER) |
| 169 | #define REQ_COMMON_MASK \ | 170 | #define REQ_COMMON_MASK \ |
| 170 | (REQ_WRITE | REQ_FAILFAST_MASK | REQ_HARDBARRIER | REQ_SYNC | \ | 171 | (REQ_WRITE | REQ_FAILFAST_MASK | REQ_HARDBARRIER | REQ_SYNC | \ |
| 171 | REQ_META| REQ_DISCARD | REQ_NOIDLE) | 172 | REQ_META | REQ_DISCARD | REQ_NOIDLE | REQ_FLUSH | REQ_FUA) |
| 173 | #define REQ_CLONE_MASK REQ_COMMON_MASK | ||
| 172 | 174 | ||
| 173 | #define REQ_UNPLUG (1 << __REQ_UNPLUG) | 175 | #define REQ_UNPLUG (1 << __REQ_UNPLUG) |
| 174 | #define REQ_RAHEAD (1 << __REQ_RAHEAD) | 176 | #define REQ_RAHEAD (1 << __REQ_RAHEAD) |
| 177 | #define REQ_THROTTLED (1 << __REQ_THROTTLED) | ||
| 175 | 178 | ||
| 176 | #define REQ_SORTED (1 << __REQ_SORTED) | 179 | #define REQ_SORTED (1 << __REQ_SORTED) |
| 177 | #define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) | 180 | #define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) |
| @@ -184,10 +187,8 @@ enum rq_flag_bits { | |||
| 184 | #define REQ_FAILED (1 << __REQ_FAILED) | 187 | #define REQ_FAILED (1 << __REQ_FAILED) |
| 185 | #define REQ_QUIET (1 << __REQ_QUIET) | 188 | #define REQ_QUIET (1 << __REQ_QUIET) |
| 186 | #define REQ_PREEMPT (1 << __REQ_PREEMPT) | 189 | #define REQ_PREEMPT (1 << __REQ_PREEMPT) |
| 187 | #define REQ_ORDERED_COLOR (1 << __REQ_ORDERED_COLOR) | ||
| 188 | #define REQ_ALLOCED (1 << __REQ_ALLOCED) | 190 | #define REQ_ALLOCED (1 << __REQ_ALLOCED) |
| 189 | #define REQ_COPY_USER (1 << __REQ_COPY_USER) | 191 | #define REQ_COPY_USER (1 << __REQ_COPY_USER) |
| 190 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) | ||
| 191 | #define REQ_FLUSH (1 << __REQ_FLUSH) | 192 | #define REQ_FLUSH (1 << __REQ_FLUSH) |
| 192 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) | 193 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) |
| 193 | #define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE) | 194 | #define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE) |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 2c54906f678f..009b80e49f53 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -115,6 +115,7 @@ struct request { | |||
| 115 | void *elevator_private3; | 115 | void *elevator_private3; |
| 116 | 116 | ||
| 117 | struct gendisk *rq_disk; | 117 | struct gendisk *rq_disk; |
| 118 | struct hd_struct *part; | ||
| 118 | unsigned long start_time; | 119 | unsigned long start_time; |
| 119 | #ifdef CONFIG_BLK_CGROUP | 120 | #ifdef CONFIG_BLK_CGROUP |
| 120 | unsigned long long start_time_ns; | 121 | unsigned long long start_time_ns; |
| @@ -124,6 +125,9 @@ struct request { | |||
| 124 | * physical address coalescing is performed. | 125 | * physical address coalescing is performed. |
| 125 | */ | 126 | */ |
| 126 | unsigned short nr_phys_segments; | 127 | unsigned short nr_phys_segments; |
| 128 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
| 129 | unsigned short nr_integrity_segments; | ||
| 130 | #endif | ||
| 127 | 131 | ||
| 128 | unsigned short ioprio; | 132 | unsigned short ioprio; |
| 129 | 133 | ||
| @@ -243,6 +247,7 @@ struct queue_limits { | |||
| 243 | 247 | ||
| 244 | unsigned short logical_block_size; | 248 | unsigned short logical_block_size; |
| 245 | unsigned short max_segments; | 249 | unsigned short max_segments; |
| 250 | unsigned short max_integrity_segments; | ||
| 246 | 251 | ||
| 247 | unsigned char misaligned; | 252 | unsigned char misaligned; |
| 248 | unsigned char discard_misaligned; | 253 | unsigned char discard_misaligned; |
| @@ -355,18 +360,25 @@ struct request_queue | |||
| 355 | struct blk_trace *blk_trace; | 360 | struct blk_trace *blk_trace; |
| 356 | #endif | 361 | #endif |
| 357 | /* | 362 | /* |
| 358 | * reserved for flush operations | 363 | * for flush operations |
| 359 | */ | 364 | */ |
| 360 | unsigned int ordered, next_ordered, ordseq; | 365 | unsigned int flush_flags; |
| 361 | int orderr, ordcolor; | 366 | unsigned int flush_seq; |
| 362 | struct request pre_flush_rq, bar_rq, post_flush_rq; | 367 | int flush_err; |
| 363 | struct request *orig_bar_rq; | 368 | struct request flush_rq; |
| 369 | struct request *orig_flush_rq; | ||
| 370 | struct list_head pending_flushes; | ||
| 364 | 371 | ||
| 365 | struct mutex sysfs_lock; | 372 | struct mutex sysfs_lock; |
| 366 | 373 | ||
| 367 | #if defined(CONFIG_BLK_DEV_BSG) | 374 | #if defined(CONFIG_BLK_DEV_BSG) |
| 368 | struct bsg_class_device bsg_dev; | 375 | struct bsg_class_device bsg_dev; |
| 369 | #endif | 376 | #endif |
| 377 | |||
| 378 | #ifdef CONFIG_BLK_DEV_THROTTLING | ||
| 379 | /* Throttle data */ | ||
| 380 | struct throtl_data *td; | ||
| 381 | #endif | ||
| 370 | }; | 382 | }; |
| 371 | 383 | ||
| 372 | #define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ | 384 | #define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ |
| @@ -462,56 +474,6 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q) | |||
| 462 | __clear_bit(flag, &q->queue_flags); | 474 | __clear_bit(flag, &q->queue_flags); |
| 463 | } | 475 | } |
| 464 | 476 | ||
| 465 | enum { | ||
| 466 | /* | ||
| 467 | * Hardbarrier is supported with one of the following methods. | ||
| 468 | * | ||
| 469 | * NONE : hardbarrier unsupported | ||
| 470 | * DRAIN : ordering by draining is enough | ||
| 471 | * DRAIN_FLUSH : ordering by draining w/ pre and post flushes | ||
| 472 | * DRAIN_FUA : ordering by draining w/ pre flush and FUA write | ||
| 473 | * TAG : ordering by tag is enough | ||
| 474 | * TAG_FLUSH : ordering by tag w/ pre and post flushes | ||
| 475 | * TAG_FUA : ordering by tag w/ pre flush and FUA write | ||
| 476 | */ | ||
| 477 | QUEUE_ORDERED_BY_DRAIN = 0x01, | ||
| 478 | QUEUE_ORDERED_BY_TAG = 0x02, | ||
| 479 | QUEUE_ORDERED_DO_PREFLUSH = 0x10, | ||
| 480 | QUEUE_ORDERED_DO_BAR = 0x20, | ||
| 481 | QUEUE_ORDERED_DO_POSTFLUSH = 0x40, | ||
| 482 | QUEUE_ORDERED_DO_FUA = 0x80, | ||
| 483 | |||
| 484 | QUEUE_ORDERED_NONE = 0x00, | ||
| 485 | |||
| 486 | QUEUE_ORDERED_DRAIN = QUEUE_ORDERED_BY_DRAIN | | ||
| 487 | QUEUE_ORDERED_DO_BAR, | ||
| 488 | QUEUE_ORDERED_DRAIN_FLUSH = QUEUE_ORDERED_DRAIN | | ||
| 489 | QUEUE_ORDERED_DO_PREFLUSH | | ||
| 490 | QUEUE_ORDERED_DO_POSTFLUSH, | ||
| 491 | QUEUE_ORDERED_DRAIN_FUA = QUEUE_ORDERED_DRAIN | | ||
| 492 | QUEUE_ORDERED_DO_PREFLUSH | | ||
| 493 | QUEUE_ORDERED_DO_FUA, | ||
| 494 | |||
| 495 | QUEUE_ORDERED_TAG = QUEUE_ORDERED_BY_TAG | | ||
| 496 | QUEUE_ORDERED_DO_BAR, | ||
| 497 | QUEUE_ORDERED_TAG_FLUSH = QUEUE_ORDERED_TAG | | ||
| 498 | QUEUE_ORDERED_DO_PREFLUSH | | ||
| 499 | QUEUE_ORDERED_DO_POSTFLUSH, | ||
| 500 | QUEUE_ORDERED_TAG_FUA = QUEUE_ORDERED_TAG | | ||
| 501 | QUEUE_ORDERED_DO_PREFLUSH | | ||
| 502 | QUEUE_ORDERED_DO_FUA, | ||
| 503 | |||
| 504 | /* | ||
| 505 | * Ordered operation sequence | ||
| 506 | */ | ||
| 507 | QUEUE_ORDSEQ_STARTED = 0x01, /* flushing in progress */ | ||
| 508 | QUEUE_ORDSEQ_DRAIN = 0x02, /* waiting for the queue to be drained */ | ||
| 509 | QUEUE_ORDSEQ_PREFLUSH = 0x04, /* pre-flushing in progress */ | ||
| 510 | QUEUE_ORDSEQ_BAR = 0x08, /* original barrier req in progress */ | ||
| 511 | QUEUE_ORDSEQ_POSTFLUSH = 0x10, /* post-flushing in progress */ | ||
| 512 | QUEUE_ORDSEQ_DONE = 0x20, | ||
| 513 | }; | ||
| 514 | |||
| 515 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 477 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
| 516 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 478 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
| 517 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 479 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
| @@ -521,7 +483,6 @@ enum { | |||
| 521 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) | 483 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) |
| 522 | #define blk_queue_io_stat(q) test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags) | 484 | #define blk_queue_io_stat(q) test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags) |
| 523 | #define blk_queue_add_random(q) test_bit(QUEUE_FLAG_ADD_RANDOM, &(q)->queue_flags) | 485 | #define blk_queue_add_random(q) test_bit(QUEUE_FLAG_ADD_RANDOM, &(q)->queue_flags) |
| 524 | #define blk_queue_flushing(q) ((q)->ordseq) | ||
| 525 | #define blk_queue_stackable(q) \ | 486 | #define blk_queue_stackable(q) \ |
| 526 | test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags) | 487 | test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags) |
| 527 | #define blk_queue_discard(q) test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags) | 488 | #define blk_queue_discard(q) test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags) |
| @@ -592,7 +553,8 @@ static inline void blk_clear_queue_full(struct request_queue *q, int sync) | |||
| 592 | * it already be started by driver. | 553 | * it already be started by driver. |
| 593 | */ | 554 | */ |
| 594 | #define RQ_NOMERGE_FLAGS \ | 555 | #define RQ_NOMERGE_FLAGS \ |
| 595 | (REQ_NOMERGE | REQ_STARTED | REQ_HARDBARRIER | REQ_SOFTBARRIER) | 556 | (REQ_NOMERGE | REQ_STARTED | REQ_HARDBARRIER | REQ_SOFTBARRIER | \ |
| 557 | REQ_FLUSH | REQ_FUA) | ||
| 596 | #define rq_mergeable(rq) \ | 558 | #define rq_mergeable(rq) \ |
| 597 | (!((rq)->cmd_flags & RQ_NOMERGE_FLAGS) && \ | 559 | (!((rq)->cmd_flags & RQ_NOMERGE_FLAGS) && \ |
| 598 | (((rq)->cmd_flags & REQ_DISCARD) || \ | 560 | (((rq)->cmd_flags & REQ_DISCARD) || \ |
| @@ -851,7 +813,7 @@ extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); | |||
| 851 | extern void blk_queue_max_discard_sectors(struct request_queue *q, | 813 | extern void blk_queue_max_discard_sectors(struct request_queue *q, |
| 852 | unsigned int max_discard_sectors); | 814 | unsigned int max_discard_sectors); |
| 853 | extern void blk_queue_logical_block_size(struct request_queue *, unsigned short); | 815 | extern void blk_queue_logical_block_size(struct request_queue *, unsigned short); |
| 854 | extern void blk_queue_physical_block_size(struct request_queue *, unsigned short); | 816 | extern void blk_queue_physical_block_size(struct request_queue *, unsigned int); |
| 855 | extern void blk_queue_alignment_offset(struct request_queue *q, | 817 | extern void blk_queue_alignment_offset(struct request_queue *q, |
| 856 | unsigned int alignment); | 818 | unsigned int alignment); |
| 857 | extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min); | 819 | extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min); |
| @@ -881,12 +843,8 @@ extern void blk_queue_update_dma_alignment(struct request_queue *, int); | |||
| 881 | extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); | 843 | extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); |
| 882 | extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *); | 844 | extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *); |
| 883 | extern void blk_queue_rq_timeout(struct request_queue *, unsigned int); | 845 | extern void blk_queue_rq_timeout(struct request_queue *, unsigned int); |
| 846 | extern void blk_queue_flush(struct request_queue *q, unsigned int flush); | ||
| 884 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); | 847 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); |
| 885 | extern int blk_queue_ordered(struct request_queue *, unsigned); | ||
| 886 | extern bool blk_do_ordered(struct request_queue *, struct request **); | ||
| 887 | extern unsigned blk_ordered_cur_seq(struct request_queue *); | ||
| 888 | extern unsigned blk_ordered_req_seq(struct request *); | ||
| 889 | extern bool blk_ordered_complete_seq(struct request_queue *, unsigned, int); | ||
| 890 | 848 | ||
| 891 | extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); | 849 | extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); |
| 892 | extern void blk_dump_rq_flags(struct request *, char *); | 850 | extern void blk_dump_rq_flags(struct request *, char *); |
| @@ -919,27 +877,20 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
| 919 | return NULL; | 877 | return NULL; |
| 920 | return bqt->tag_index[tag]; | 878 | return bqt->tag_index[tag]; |
| 921 | } | 879 | } |
| 922 | enum{ | 880 | |
| 923 | BLKDEV_WAIT, /* wait for completion */ | 881 | #define BLKDEV_DISCARD_SECURE 0x01 /* secure discard */ |
| 924 | BLKDEV_BARRIER, /* issue request with barrier */ | 882 | |
| 925 | BLKDEV_SECURE, /* secure discard */ | 883 | extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *); |
| 926 | }; | ||
| 927 | #define BLKDEV_IFL_WAIT (1 << BLKDEV_WAIT) | ||
| 928 | #define BLKDEV_IFL_BARRIER (1 << BLKDEV_BARRIER) | ||
| 929 | #define BLKDEV_IFL_SECURE (1 << BLKDEV_SECURE) | ||
| 930 | extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *, | ||
| 931 | unsigned long); | ||
| 932 | extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector, | 884 | extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector, |
| 933 | sector_t nr_sects, gfp_t gfp_mask, unsigned long flags); | 885 | sector_t nr_sects, gfp_t gfp_mask, unsigned long flags); |
| 934 | extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, | 886 | extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, |
| 935 | sector_t nr_sects, gfp_t gfp_mask, unsigned long flags); | 887 | sector_t nr_sects, gfp_t gfp_mask); |
| 936 | static inline int sb_issue_discard(struct super_block *sb, | 888 | static inline int sb_issue_discard(struct super_block *sb, sector_t block, |
| 937 | sector_t block, sector_t nr_blocks) | 889 | sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags) |
| 938 | { | 890 | { |
| 939 | block <<= (sb->s_blocksize_bits - 9); | 891 | return blkdev_issue_discard(sb->s_bdev, block << (sb->s_blocksize_bits - 9), |
| 940 | nr_blocks <<= (sb->s_blocksize_bits - 9); | 892 | nr_blocks << (sb->s_blocksize_bits - 9), |
| 941 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_NOFS, | 893 | gfp_mask, flags); |
| 942 | BLKDEV_IFL_WAIT | BLKDEV_IFL_BARRIER); | ||
| 943 | } | 894 | } |
| 944 | 895 | ||
| 945 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); | 896 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); |
| @@ -1004,7 +955,7 @@ static inline unsigned int queue_physical_block_size(struct request_queue *q) | |||
| 1004 | return q->limits.physical_block_size; | 955 | return q->limits.physical_block_size; |
| 1005 | } | 956 | } |
| 1006 | 957 | ||
| 1007 | static inline int bdev_physical_block_size(struct block_device *bdev) | 958 | static inline unsigned int bdev_physical_block_size(struct block_device *bdev) |
| 1008 | { | 959 | { |
| 1009 | return queue_physical_block_size(bdev_get_queue(bdev)); | 960 | return queue_physical_block_size(bdev_get_queue(bdev)); |
| 1010 | } | 961 | } |
| @@ -1093,11 +1044,11 @@ static inline int queue_dma_alignment(struct request_queue *q) | |||
| 1093 | return q ? q->dma_alignment : 511; | 1044 | return q ? q->dma_alignment : 511; |
| 1094 | } | 1045 | } |
| 1095 | 1046 | ||
| 1096 | static inline int blk_rq_aligned(struct request_queue *q, void *addr, | 1047 | static inline int blk_rq_aligned(struct request_queue *q, unsigned long addr, |
| 1097 | unsigned int len) | 1048 | unsigned int len) |
| 1098 | { | 1049 | { |
| 1099 | unsigned int alignment = queue_dma_alignment(q) | q->dma_pad_mask; | 1050 | unsigned int alignment = queue_dma_alignment(q) | q->dma_pad_mask; |
| 1100 | return !((unsigned long)addr & alignment) && !(len & alignment); | 1051 | return !(addr & alignment) && !(len & alignment); |
| 1101 | } | 1052 | } |
| 1102 | 1053 | ||
| 1103 | /* assumes size > 256 */ | 1054 | /* assumes size > 256 */ |
| @@ -1127,6 +1078,7 @@ static inline void put_dev_sector(Sector p) | |||
| 1127 | 1078 | ||
| 1128 | struct work_struct; | 1079 | struct work_struct; |
| 1129 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); | 1080 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); |
| 1081 | int kblockd_schedule_delayed_work(struct request_queue *q, struct delayed_work *dwork, unsigned long delay); | ||
| 1130 | 1082 | ||
| 1131 | #ifdef CONFIG_BLK_CGROUP | 1083 | #ifdef CONFIG_BLK_CGROUP |
| 1132 | /* | 1084 | /* |
| @@ -1170,6 +1122,24 @@ static inline uint64_t rq_io_start_time_ns(struct request *req) | |||
| 1170 | } | 1122 | } |
| 1171 | #endif | 1123 | #endif |
| 1172 | 1124 | ||
| 1125 | #ifdef CONFIG_BLK_DEV_THROTTLING | ||
| 1126 | extern int blk_throtl_init(struct request_queue *q); | ||
| 1127 | extern void blk_throtl_exit(struct request_queue *q); | ||
| 1128 | extern int blk_throtl_bio(struct request_queue *q, struct bio **bio); | ||
| 1129 | extern void throtl_schedule_delayed_work(struct request_queue *q, unsigned long delay); | ||
| 1130 | extern void throtl_shutdown_timer_wq(struct request_queue *q); | ||
| 1131 | #else /* CONFIG_BLK_DEV_THROTTLING */ | ||
| 1132 | static inline int blk_throtl_bio(struct request_queue *q, struct bio **bio) | ||
| 1133 | { | ||
| 1134 | return 0; | ||
| 1135 | } | ||
| 1136 | |||
| 1137 | static inline int blk_throtl_init(struct request_queue *q) { return 0; } | ||
| 1138 | static inline int blk_throtl_exit(struct request_queue *q) { return 0; } | ||
| 1139 | static inline void throtl_schedule_delayed_work(struct request_queue *q, unsigned long delay) {} | ||
| 1140 | static inline void throtl_shutdown_timer_wq(struct request_queue *q) {} | ||
| 1141 | #endif /* CONFIG_BLK_DEV_THROTTLING */ | ||
| 1142 | |||
| 1173 | #define MODULE_ALIAS_BLOCKDEV(major,minor) \ | 1143 | #define MODULE_ALIAS_BLOCKDEV(major,minor) \ |
| 1174 | MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) | 1144 | MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) |
| 1175 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ | 1145 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ |
| @@ -1213,8 +1183,13 @@ struct blk_integrity { | |||
| 1213 | extern int blk_integrity_register(struct gendisk *, struct blk_integrity *); | 1183 | extern int blk_integrity_register(struct gendisk *, struct blk_integrity *); |
| 1214 | extern void blk_integrity_unregister(struct gendisk *); | 1184 | extern void blk_integrity_unregister(struct gendisk *); |
| 1215 | extern int blk_integrity_compare(struct gendisk *, struct gendisk *); | 1185 | extern int blk_integrity_compare(struct gendisk *, struct gendisk *); |
| 1216 | extern int blk_rq_map_integrity_sg(struct request *, struct scatterlist *); | 1186 | extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *, |
| 1217 | extern int blk_rq_count_integrity_sg(struct request *); | 1187 | struct scatterlist *); |
| 1188 | extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *); | ||
| 1189 | extern int blk_integrity_merge_rq(struct request_queue *, struct request *, | ||
| 1190 | struct request *); | ||
| 1191 | extern int blk_integrity_merge_bio(struct request_queue *, struct request *, | ||
| 1192 | struct bio *); | ||
| 1218 | 1193 | ||
| 1219 | static inline | 1194 | static inline |
| 1220 | struct blk_integrity *bdev_get_integrity(struct block_device *bdev) | 1195 | struct blk_integrity *bdev_get_integrity(struct block_device *bdev) |
| @@ -1235,16 +1210,32 @@ static inline int blk_integrity_rq(struct request *rq) | |||
| 1235 | return bio_integrity(rq->bio); | 1210 | return bio_integrity(rq->bio); |
| 1236 | } | 1211 | } |
| 1237 | 1212 | ||
| 1213 | static inline void blk_queue_max_integrity_segments(struct request_queue *q, | ||
| 1214 | unsigned int segs) | ||
| 1215 | { | ||
| 1216 | q->limits.max_integrity_segments = segs; | ||
| 1217 | } | ||
| 1218 | |||
| 1219 | static inline unsigned short | ||
| 1220 | queue_max_integrity_segments(struct request_queue *q) | ||
| 1221 | { | ||
| 1222 | return q->limits.max_integrity_segments; | ||
| 1223 | } | ||
| 1224 | |||
| 1238 | #else /* CONFIG_BLK_DEV_INTEGRITY */ | 1225 | #else /* CONFIG_BLK_DEV_INTEGRITY */ |
| 1239 | 1226 | ||
| 1240 | #define blk_integrity_rq(rq) (0) | 1227 | #define blk_integrity_rq(rq) (0) |
| 1241 | #define blk_rq_count_integrity_sg(a) (0) | 1228 | #define blk_rq_count_integrity_sg(a, b) (0) |
| 1242 | #define blk_rq_map_integrity_sg(a, b) (0) | 1229 | #define blk_rq_map_integrity_sg(a, b, c) (0) |
| 1243 | #define bdev_get_integrity(a) (0) | 1230 | #define bdev_get_integrity(a) (0) |
| 1244 | #define blk_get_integrity(a) (0) | 1231 | #define blk_get_integrity(a) (0) |
| 1245 | #define blk_integrity_compare(a, b) (0) | 1232 | #define blk_integrity_compare(a, b) (0) |
| 1246 | #define blk_integrity_register(a, b) (0) | 1233 | #define blk_integrity_register(a, b) (0) |
| 1247 | #define blk_integrity_unregister(a) do { } while (0); | 1234 | #define blk_integrity_unregister(a) do { } while (0); |
| 1235 | #define blk_queue_max_integrity_segments(a, b) do { } while (0); | ||
| 1236 | #define queue_max_integrity_segments(a) (0) | ||
| 1237 | #define blk_integrity_merge_rq(a, b, c) (0) | ||
| 1238 | #define blk_integrity_merge_bio(a, b, c) (0) | ||
| 1248 | 1239 | ||
| 1249 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ | 1240 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ |
| 1250 | 1241 | ||
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index ec94c12f21da..dd1b25b2641c 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
| @@ -32,7 +32,6 @@ enum bh_state_bits { | |||
| 32 | BH_Delay, /* Buffer is not yet allocated on disk */ | 32 | BH_Delay, /* Buffer is not yet allocated on disk */ |
| 33 | BH_Boundary, /* Block is followed by a discontiguity */ | 33 | BH_Boundary, /* Block is followed by a discontiguity */ |
| 34 | BH_Write_EIO, /* I/O error on write */ | 34 | BH_Write_EIO, /* I/O error on write */ |
| 35 | BH_Eopnotsupp, /* operation not supported (barrier) */ | ||
| 36 | BH_Unwritten, /* Buffer is allocated on disk but not written */ | 35 | BH_Unwritten, /* Buffer is allocated on disk but not written */ |
| 37 | BH_Quiet, /* Buffer Error Prinks to be quiet */ | 36 | BH_Quiet, /* Buffer Error Prinks to be quiet */ |
| 38 | 37 | ||
| @@ -124,7 +123,6 @@ BUFFER_FNS(Async_Write, async_write) | |||
| 124 | BUFFER_FNS(Delay, delay) | 123 | BUFFER_FNS(Delay, delay) |
| 125 | BUFFER_FNS(Boundary, boundary) | 124 | BUFFER_FNS(Boundary, boundary) |
| 126 | BUFFER_FNS(Write_EIO, write_io_error) | 125 | BUFFER_FNS(Write_EIO, write_io_error) |
| 127 | BUFFER_FNS(Eopnotsupp, eopnotsupp) | ||
| 128 | BUFFER_FNS(Unwritten, unwritten) | 126 | BUFFER_FNS(Unwritten, unwritten) |
| 129 | 127 | ||
| 130 | #define bh_offset(bh) ((unsigned long)(bh)->b_data & ~PAGE_MASK) | 128 | #define bh_offset(bh) ((unsigned long)(bh)->b_data & ~PAGE_MASK) |
diff --git a/include/linux/device.h b/include/linux/device.h index 516fecacf27b..dd4895313468 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -751,4 +751,11 @@ do { \ | |||
| 751 | MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) | 751 | MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) |
| 752 | #define MODULE_ALIAS_CHARDEV_MAJOR(major) \ | 752 | #define MODULE_ALIAS_CHARDEV_MAJOR(major) \ |
| 753 | MODULE_ALIAS("char-major-" __stringify(major) "-*") | 753 | MODULE_ALIAS("char-major-" __stringify(major) "-*") |
| 754 | |||
| 755 | #ifdef CONFIG_SYSFS_DEPRECATED | ||
| 756 | extern long sysfs_deprecated; | ||
| 757 | #else | ||
| 758 | #define sysfs_deprecated 0 | ||
| 759 | #endif | ||
| 760 | |||
| 754 | #endif /* _DEVICE_H_ */ | 761 | #endif /* _DEVICE_H_ */ |
diff --git a/include/linux/dlm.h b/include/linux/dlm.h index 0b3518c42356..d4e02f5353a0 100644 --- a/include/linux/dlm.h +++ b/include/linux/dlm.h | |||
| @@ -48,10 +48,10 @@ typedef void dlm_lockspace_t; | |||
| 48 | * | 48 | * |
| 49 | * 0 if lock request was successful | 49 | * 0 if lock request was successful |
| 50 | * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE | 50 | * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE |
| 51 | * -ENOMEM if there is no memory to process request | ||
| 52 | * -EINVAL if there are invalid parameters | ||
| 53 | * -DLM_EUNLOCK if unlock request was successful | 51 | * -DLM_EUNLOCK if unlock request was successful |
| 54 | * -DLM_ECANCEL if a cancel completed successfully | 52 | * -DLM_ECANCEL if a cancel completed successfully |
| 53 | * -EDEADLK if a deadlock was detected | ||
| 54 | * -ETIMEDOUT if the lock request was canceled due to a timeout | ||
| 55 | */ | 55 | */ |
| 56 | 56 | ||
| 57 | #define DLM_SBF_DEMOTED 0x01 | 57 | #define DLM_SBF_DEMOTED 0x01 |
diff --git a/include/linux/drbd.h b/include/linux/drbd.h index 479ee3a1d901..9b2a0158f399 100644 --- a/include/linux/drbd.h +++ b/include/linux/drbd.h | |||
| @@ -53,10 +53,10 @@ | |||
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | extern const char *drbd_buildtag(void); | 55 | extern const char *drbd_buildtag(void); |
| 56 | #define REL_VERSION "8.3.8.1" | 56 | #define REL_VERSION "8.3.9rc2" |
| 57 | #define API_VERSION 88 | 57 | #define API_VERSION 88 |
| 58 | #define PRO_VERSION_MIN 86 | 58 | #define PRO_VERSION_MIN 86 |
| 59 | #define PRO_VERSION_MAX 94 | 59 | #define PRO_VERSION_MAX 95 |
| 60 | 60 | ||
| 61 | 61 | ||
| 62 | enum drbd_io_error_p { | 62 | enum drbd_io_error_p { |
| @@ -91,6 +91,11 @@ enum drbd_after_sb_p { | |||
| 91 | ASB_VIOLENTLY | 91 | ASB_VIOLENTLY |
| 92 | }; | 92 | }; |
| 93 | 93 | ||
| 94 | enum drbd_on_no_data { | ||
| 95 | OND_IO_ERROR, | ||
| 96 | OND_SUSPEND_IO | ||
| 97 | }; | ||
| 98 | |||
| 94 | /* KEEP the order, do not delete or insert. Only append. */ | 99 | /* KEEP the order, do not delete or insert. Only append. */ |
| 95 | enum drbd_ret_codes { | 100 | enum drbd_ret_codes { |
| 96 | ERR_CODE_BASE = 100, | 101 | ERR_CODE_BASE = 100, |
| @@ -140,6 +145,7 @@ enum drbd_ret_codes { | |||
| 140 | ERR_CONNECTED = 151, /* DRBD 8.3 only */ | 145 | ERR_CONNECTED = 151, /* DRBD 8.3 only */ |
| 141 | ERR_PERM = 152, | 146 | ERR_PERM = 152, |
| 142 | ERR_NEED_APV_93 = 153, | 147 | ERR_NEED_APV_93 = 153, |
| 148 | ERR_STONITH_AND_PROT_A = 154, | ||
| 143 | 149 | ||
| 144 | /* insert new ones above this line */ | 150 | /* insert new ones above this line */ |
| 145 | AFTER_LAST_ERR_CODE | 151 | AFTER_LAST_ERR_CODE |
| @@ -226,13 +232,17 @@ union drbd_state { | |||
| 226 | unsigned conn:5 ; /* 17/32 cstates */ | 232 | unsigned conn:5 ; /* 17/32 cstates */ |
| 227 | unsigned disk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */ | 233 | unsigned disk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */ |
| 228 | unsigned pdsk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */ | 234 | unsigned pdsk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */ |
| 229 | unsigned susp:1 ; /* 2/2 IO suspended no/yes */ | 235 | unsigned susp:1 ; /* 2/2 IO suspended no/yes (by user) */ |
| 230 | unsigned aftr_isp:1 ; /* isp .. imposed sync pause */ | 236 | unsigned aftr_isp:1 ; /* isp .. imposed sync pause */ |
| 231 | unsigned peer_isp:1 ; | 237 | unsigned peer_isp:1 ; |
| 232 | unsigned user_isp:1 ; | 238 | unsigned user_isp:1 ; |
| 233 | unsigned _pad:11; /* 0 unused */ | 239 | unsigned susp_nod:1 ; /* IO suspended because no data */ |
| 240 | unsigned susp_fen:1 ; /* IO suspended because fence peer handler runs*/ | ||
| 241 | unsigned _pad:9; /* 0 unused */ | ||
| 234 | #elif defined(__BIG_ENDIAN_BITFIELD) | 242 | #elif defined(__BIG_ENDIAN_BITFIELD) |
| 235 | unsigned _pad:11; /* 0 unused */ | 243 | unsigned _pad:9; |
| 244 | unsigned susp_fen:1 ; | ||
| 245 | unsigned susp_nod:1 ; | ||
| 236 | unsigned user_isp:1 ; | 246 | unsigned user_isp:1 ; |
| 237 | unsigned peer_isp:1 ; | 247 | unsigned peer_isp:1 ; |
| 238 | unsigned aftr_isp:1 ; /* isp .. imposed sync pause */ | 248 | unsigned aftr_isp:1 ; /* isp .. imposed sync pause */ |
| @@ -312,6 +322,8 @@ enum drbd_timeout_flag { | |||
| 312 | 322 | ||
| 313 | #define DRBD_MAGIC 0x83740267 | 323 | #define DRBD_MAGIC 0x83740267 |
| 314 | #define BE_DRBD_MAGIC __constant_cpu_to_be32(DRBD_MAGIC) | 324 | #define BE_DRBD_MAGIC __constant_cpu_to_be32(DRBD_MAGIC) |
| 325 | #define DRBD_MAGIC_BIG 0x835a | ||
| 326 | #define BE_DRBD_MAGIC_BIG __constant_cpu_to_be16(DRBD_MAGIC_BIG) | ||
| 315 | 327 | ||
| 316 | /* these are of type "int" */ | 328 | /* these are of type "int" */ |
| 317 | #define DRBD_MD_INDEX_INTERNAL -1 | 329 | #define DRBD_MD_INDEX_INTERNAL -1 |
diff --git a/include/linux/drbd_limits.h b/include/linux/drbd_limits.h index 440b42e38e89..4ac33f34b77e 100644 --- a/include/linux/drbd_limits.h +++ b/include/linux/drbd_limits.h | |||
| @@ -128,26 +128,31 @@ | |||
| 128 | #define DRBD_AFTER_SB_1P_DEF ASB_DISCONNECT | 128 | #define DRBD_AFTER_SB_1P_DEF ASB_DISCONNECT |
| 129 | #define DRBD_AFTER_SB_2P_DEF ASB_DISCONNECT | 129 | #define DRBD_AFTER_SB_2P_DEF ASB_DISCONNECT |
| 130 | #define DRBD_RR_CONFLICT_DEF ASB_DISCONNECT | 130 | #define DRBD_RR_CONFLICT_DEF ASB_DISCONNECT |
| 131 | #define DRBD_ON_NO_DATA_DEF OND_IO_ERROR | ||
| 131 | 132 | ||
| 132 | #define DRBD_MAX_BIO_BVECS_MIN 0 | 133 | #define DRBD_MAX_BIO_BVECS_MIN 0 |
| 133 | #define DRBD_MAX_BIO_BVECS_MAX 128 | 134 | #define DRBD_MAX_BIO_BVECS_MAX 128 |
| 134 | #define DRBD_MAX_BIO_BVECS_DEF 0 | 135 | #define DRBD_MAX_BIO_BVECS_DEF 0 |
| 135 | 136 | ||
| 136 | #define DRBD_DP_VOLUME_MIN 4 | 137 | #define DRBD_C_PLAN_AHEAD_MIN 0 |
| 137 | #define DRBD_DP_VOLUME_MAX 1048576 | 138 | #define DRBD_C_PLAN_AHEAD_MAX 300 |
| 138 | #define DRBD_DP_VOLUME_DEF 16384 | 139 | #define DRBD_C_PLAN_AHEAD_DEF 0 /* RS rate controller disabled by default */ |
| 139 | 140 | ||
| 140 | #define DRBD_DP_INTERVAL_MIN 1 | 141 | #define DRBD_C_DELAY_TARGET_MIN 1 |
| 141 | #define DRBD_DP_INTERVAL_MAX 600 | 142 | #define DRBD_C_DELAY_TARGET_MAX 100 |
| 142 | #define DRBD_DP_INTERVAL_DEF 5 | 143 | #define DRBD_C_DELAY_TARGET_DEF 10 |
| 143 | 144 | ||
| 144 | #define DRBD_RS_THROTTLE_TH_MIN 1 | 145 | #define DRBD_C_FILL_TARGET_MIN 0 |
| 145 | #define DRBD_RS_THROTTLE_TH_MAX 600 | 146 | #define DRBD_C_FILL_TARGET_MAX (1<<20) /* 500MByte in sec */ |
| 146 | #define DRBD_RS_THROTTLE_TH_DEF 20 | 147 | #define DRBD_C_FILL_TARGET_DEF 0 /* By default disabled -> controlled by delay_target */ |
| 147 | 148 | ||
| 148 | #define DRBD_RS_HOLD_OFF_TH_MIN 1 | 149 | #define DRBD_C_MAX_RATE_MIN 250 /* kByte/sec */ |
| 149 | #define DRBD_RS_HOLD_OFF_TH_MAX 6000 | 150 | #define DRBD_C_MAX_RATE_MAX (4 << 20) |
| 150 | #define DRBD_RS_HOLD_OFF_TH_DEF 100 | 151 | #define DRBD_C_MAX_RATE_DEF 102400 |
| 152 | |||
| 153 | #define DRBD_C_MIN_RATE_MIN 0 /* kByte/sec */ | ||
| 154 | #define DRBD_C_MIN_RATE_MAX (4 << 20) | ||
| 155 | #define DRBD_C_MIN_RATE_DEF 4096 | ||
| 151 | 156 | ||
| 152 | #undef RANGE | 157 | #undef RANGE |
| 153 | #endif | 158 | #endif |
diff --git a/include/linux/drbd_nl.h b/include/linux/drbd_nl.h index 5f042810a56c..ade91107c9a5 100644 --- a/include/linux/drbd_nl.h +++ b/include/linux/drbd_nl.h | |||
| @@ -87,6 +87,12 @@ NL_PACKET(syncer_conf, 8, | |||
| 87 | NL_STRING( 51, T_MAY_IGNORE, cpu_mask, 32) | 87 | NL_STRING( 51, T_MAY_IGNORE, cpu_mask, 32) |
| 88 | NL_STRING( 64, T_MAY_IGNORE, csums_alg, SHARED_SECRET_MAX) | 88 | NL_STRING( 64, T_MAY_IGNORE, csums_alg, SHARED_SECRET_MAX) |
| 89 | NL_BIT( 65, T_MAY_IGNORE, use_rle) | 89 | NL_BIT( 65, T_MAY_IGNORE, use_rle) |
| 90 | NL_INTEGER( 75, T_MAY_IGNORE, on_no_data) | ||
| 91 | NL_INTEGER( 76, T_MAY_IGNORE, c_plan_ahead) | ||
| 92 | NL_INTEGER( 77, T_MAY_IGNORE, c_delay_target) | ||
| 93 | NL_INTEGER( 78, T_MAY_IGNORE, c_fill_target) | ||
| 94 | NL_INTEGER( 79, T_MAY_IGNORE, c_max_rate) | ||
| 95 | NL_INTEGER( 80, T_MAY_IGNORE, c_min_rate) | ||
| 90 | ) | 96 | ) |
| 91 | 97 | ||
| 92 | NL_PACKET(invalidate, 9, ) | 98 | NL_PACKET(invalidate, 9, ) |
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index bef3cda44c4c..a90b3892074a 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h | |||
| @@ -83,7 +83,7 @@ static inline int ddebug_remove_module(const char *mod) | |||
| 83 | 83 | ||
| 84 | #define dynamic_pr_debug(fmt, ...) \ | 84 | #define dynamic_pr_debug(fmt, ...) \ |
| 85 | do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0) | 85 | do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0) |
| 86 | #define dynamic_dev_dbg(dev, format, ...) \ | 86 | #define dynamic_dev_dbg(dev, fmt, ...) \ |
| 87 | do { if (0) dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); } while (0) | 87 | do { if (0) dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); } while (0) |
| 88 | #endif | 88 | #endif |
| 89 | 89 | ||
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 4fd978e7eb83..80a0ece8f7e4 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -122,6 +122,8 @@ extern void elv_completed_request(struct request_queue *, struct request *); | |||
| 122 | extern int elv_set_request(struct request_queue *, struct request *, gfp_t); | 122 | extern int elv_set_request(struct request_queue *, struct request *, gfp_t); |
| 123 | extern void elv_put_request(struct request_queue *, struct request *); | 123 | extern void elv_put_request(struct request_queue *, struct request *); |
| 124 | extern void elv_drain_elevator(struct request_queue *); | 124 | extern void elv_drain_elevator(struct request_queue *); |
| 125 | extern void elv_quiesce_start(struct request_queue *); | ||
| 126 | extern void elv_quiesce_end(struct request_queue *); | ||
| 125 | 127 | ||
| 126 | /* | 128 | /* |
| 127 | * io scheduler registration | 129 | * io scheduler registration |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 0a81b87ea158..4f34ff6e5558 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -135,12 +135,12 @@ struct inodes_stat_t { | |||
| 135 | * immediately after submission. The write equivalent | 135 | * immediately after submission. The write equivalent |
| 136 | * of READ_SYNC. | 136 | * of READ_SYNC. |
| 137 | * WRITE_ODIRECT_PLUG Special case write for O_DIRECT only. | 137 | * WRITE_ODIRECT_PLUG Special case write for O_DIRECT only. |
| 138 | * WRITE_BARRIER Like WRITE_SYNC, but tells the block layer that all | 138 | * WRITE_FLUSH Like WRITE_SYNC but with preceding cache flush. |
| 139 | * previously submitted writes must be safely on storage | 139 | * WRITE_FUA Like WRITE_SYNC but data is guaranteed to be on |
| 140 | * before this one is started. Also guarantees that when | 140 | * non-volatile media on completion. |
| 141 | * this write is complete, it itself is also safely on | 141 | * WRITE_FLUSH_FUA Combination of WRITE_FLUSH and FUA. The IO is preceded |
| 142 | * storage. Prevents reordering of writes on both sides | 142 | * by a cache flush and data is guaranteed to be on |
| 143 | * of this IO. | 143 | * non-volatile media on completion. |
| 144 | * | 144 | * |
| 145 | */ | 145 | */ |
| 146 | #define RW_MASK REQ_WRITE | 146 | #define RW_MASK REQ_WRITE |
| @@ -156,16 +156,12 @@ struct inodes_stat_t { | |||
| 156 | #define WRITE_SYNC (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG) | 156 | #define WRITE_SYNC (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG) |
| 157 | #define WRITE_ODIRECT_PLUG (WRITE | REQ_SYNC) | 157 | #define WRITE_ODIRECT_PLUG (WRITE | REQ_SYNC) |
| 158 | #define WRITE_META (WRITE | REQ_META) | 158 | #define WRITE_META (WRITE | REQ_META) |
| 159 | #define WRITE_BARRIER (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \ | 159 | #define WRITE_FLUSH (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \ |
| 160 | REQ_HARDBARRIER) | 160 | REQ_FLUSH) |
| 161 | 161 | #define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \ | |
| 162 | /* | 162 | REQ_FUA) |
| 163 | * These aren't really reads or writes, they pass down information about | 163 | #define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \ |
| 164 | * parts of device that are now unused by the file system. | 164 | REQ_FLUSH | REQ_FUA) |
| 165 | */ | ||
| 166 | #define DISCARD_NOBARRIER (WRITE | REQ_DISCARD) | ||
| 167 | #define DISCARD_BARRIER (WRITE | REQ_DISCARD | REQ_HARDBARRIER) | ||
| 168 | #define DISCARD_SECURE (DISCARD_NOBARRIER | REQ_SECURE) | ||
| 169 | 165 | ||
| 170 | #define SEL_IN 1 | 166 | #define SEL_IN 1 |
| 171 | #define SEL_OUT 2 | 167 | #define SEL_OUT 2 |
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index 28e33fea5107..4eb56ed75fbc 100644 --- a/include/linux/fsl_devices.h +++ b/include/linux/fsl_devices.h | |||
| @@ -58,17 +58,35 @@ enum fsl_usb2_phy_modes { | |||
| 58 | FSL_USB2_PHY_SERIAL, | 58 | FSL_USB2_PHY_SERIAL, |
| 59 | }; | 59 | }; |
| 60 | 60 | ||
| 61 | struct clk; | ||
| 62 | struct platform_device; | ||
| 63 | |||
| 61 | struct fsl_usb2_platform_data { | 64 | struct fsl_usb2_platform_data { |
| 62 | /* board specific information */ | 65 | /* board specific information */ |
| 63 | enum fsl_usb2_operating_modes operating_mode; | 66 | enum fsl_usb2_operating_modes operating_mode; |
| 64 | enum fsl_usb2_phy_modes phy_mode; | 67 | enum fsl_usb2_phy_modes phy_mode; |
| 65 | unsigned int port_enables; | 68 | unsigned int port_enables; |
| 69 | unsigned int workaround; | ||
| 70 | |||
| 71 | int (*init)(struct platform_device *); | ||
| 72 | void (*exit)(struct platform_device *); | ||
| 73 | void __iomem *regs; /* ioremap'd register base */ | ||
| 74 | struct clk *clk; | ||
| 75 | unsigned big_endian_mmio:1; | ||
| 76 | unsigned big_endian_desc:1; | ||
| 77 | unsigned es:1; /* need USBMODE:ES */ | ||
| 78 | unsigned le_setup_buf:1; | ||
| 79 | unsigned have_sysif_regs:1; | ||
| 80 | unsigned invert_drvvbus:1; | ||
| 81 | unsigned invert_pwr_fault:1; | ||
| 66 | }; | 82 | }; |
| 67 | 83 | ||
| 68 | /* Flags in fsl_usb2_mph_platform_data */ | 84 | /* Flags in fsl_usb2_mph_platform_data */ |
| 69 | #define FSL_USB2_PORT0_ENABLED 0x00000001 | 85 | #define FSL_USB2_PORT0_ENABLED 0x00000001 |
| 70 | #define FSL_USB2_PORT1_ENABLED 0x00000002 | 86 | #define FSL_USB2_PORT1_ENABLED 0x00000002 |
| 71 | 87 | ||
| 88 | #define FLS_USB2_WORKAROUND_ENGCM09152 (1 << 0) | ||
| 89 | |||
| 72 | struct spi_device; | 90 | struct spi_device; |
| 73 | 91 | ||
| 74 | struct fsl_spi_platform_data { | 92 | struct fsl_spi_platform_data { |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index af3f06b41dc1..557c3927e70f 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
| 13 | #include <linux/kdev_t.h> | 13 | #include <linux/kdev_t.h> |
| 14 | #include <linux/rcupdate.h> | 14 | #include <linux/rcupdate.h> |
| 15 | #include <linux/slab.h> | ||
| 15 | 16 | ||
| 16 | #ifdef CONFIG_BLOCK | 17 | #ifdef CONFIG_BLOCK |
| 17 | 18 | ||
| @@ -86,7 +87,15 @@ struct disk_stats { | |||
| 86 | unsigned long io_ticks; | 87 | unsigned long io_ticks; |
| 87 | unsigned long time_in_queue; | 88 | unsigned long time_in_queue; |
| 88 | }; | 89 | }; |
| 89 | 90 | ||
| 91 | #define PARTITION_META_INFO_VOLNAMELTH 64 | ||
| 92 | #define PARTITION_META_INFO_UUIDLTH 16 | ||
| 93 | |||
| 94 | struct partition_meta_info { | ||
| 95 | u8 uuid[PARTITION_META_INFO_UUIDLTH]; /* always big endian */ | ||
| 96 | u8 volname[PARTITION_META_INFO_VOLNAMELTH]; | ||
| 97 | }; | ||
| 98 | |||
| 90 | struct hd_struct { | 99 | struct hd_struct { |
| 91 | sector_t start_sect; | 100 | sector_t start_sect; |
| 92 | sector_t nr_sects; | 101 | sector_t nr_sects; |
| @@ -95,6 +104,7 @@ struct hd_struct { | |||
| 95 | struct device __dev; | 104 | struct device __dev; |
| 96 | struct kobject *holder_dir; | 105 | struct kobject *holder_dir; |
| 97 | int policy, partno; | 106 | int policy, partno; |
| 107 | struct partition_meta_info *info; | ||
| 98 | #ifdef CONFIG_FAIL_MAKE_REQUEST | 108 | #ifdef CONFIG_FAIL_MAKE_REQUEST |
| 99 | int make_it_fail; | 109 | int make_it_fail; |
| 100 | #endif | 110 | #endif |
| @@ -130,6 +140,7 @@ struct disk_part_tbl { | |||
| 130 | struct rcu_head rcu_head; | 140 | struct rcu_head rcu_head; |
| 131 | int len; | 141 | int len; |
| 132 | struct hd_struct __rcu *last_lookup; | 142 | struct hd_struct __rcu *last_lookup; |
| 143 | struct gendisk *disk; | ||
| 133 | struct hd_struct __rcu *part[]; | 144 | struct hd_struct __rcu *part[]; |
| 134 | }; | 145 | }; |
| 135 | 146 | ||
| @@ -181,6 +192,30 @@ static inline struct gendisk *part_to_disk(struct hd_struct *part) | |||
| 181 | return NULL; | 192 | return NULL; |
| 182 | } | 193 | } |
| 183 | 194 | ||
| 195 | static inline void part_pack_uuid(const u8 *uuid_str, u8 *to) | ||
| 196 | { | ||
| 197 | int i; | ||
| 198 | for (i = 0; i < 16; ++i) { | ||
| 199 | *to++ = (hex_to_bin(*uuid_str) << 4) | | ||
| 200 | (hex_to_bin(*(uuid_str + 1))); | ||
| 201 | uuid_str += 2; | ||
| 202 | switch (i) { | ||
| 203 | case 3: | ||
| 204 | case 5: | ||
| 205 | case 7: | ||
| 206 | case 9: | ||
| 207 | uuid_str++; | ||
| 208 | continue; | ||
| 209 | } | ||
| 210 | } | ||
| 211 | } | ||
| 212 | |||
| 213 | static inline char *part_unpack_uuid(const u8 *uuid, char *out) | ||
| 214 | { | ||
| 215 | sprintf(out, "%pU", uuid); | ||
| 216 | return out; | ||
| 217 | } | ||
| 218 | |||
| 184 | static inline int disk_max_parts(struct gendisk *disk) | 219 | static inline int disk_max_parts(struct gendisk *disk) |
| 185 | { | 220 | { |
| 186 | if (disk->flags & GENHD_FL_EXT_DEVT) | 221 | if (disk->flags & GENHD_FL_EXT_DEVT) |
| @@ -342,6 +377,19 @@ static inline int part_in_flight(struct hd_struct *part) | |||
| 342 | return part->in_flight[0] + part->in_flight[1]; | 377 | return part->in_flight[0] + part->in_flight[1]; |
| 343 | } | 378 | } |
| 344 | 379 | ||
| 380 | static inline struct partition_meta_info *alloc_part_info(struct gendisk *disk) | ||
| 381 | { | ||
| 382 | if (disk) | ||
| 383 | return kzalloc_node(sizeof(struct partition_meta_info), | ||
| 384 | GFP_KERNEL, disk->node_id); | ||
| 385 | return kzalloc(sizeof(struct partition_meta_info), GFP_KERNEL); | ||
| 386 | } | ||
| 387 | |||
| 388 | static inline void free_part_info(struct hd_struct *part) | ||
| 389 | { | ||
| 390 | kfree(part->info); | ||
| 391 | } | ||
| 392 | |||
| 345 | /* block/blk-core.c */ | 393 | /* block/blk-core.c */ |
| 346 | extern void part_round_stats(int cpu, struct hd_struct *part); | 394 | extern void part_round_stats(int cpu, struct hd_struct *part); |
| 347 | 395 | ||
| @@ -533,7 +581,9 @@ extern int disk_expand_part_tbl(struct gendisk *disk, int target); | |||
| 533 | extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev); | 581 | extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev); |
| 534 | extern struct hd_struct * __must_check add_partition(struct gendisk *disk, | 582 | extern struct hd_struct * __must_check add_partition(struct gendisk *disk, |
| 535 | int partno, sector_t start, | 583 | int partno, sector_t start, |
| 536 | sector_t len, int flags); | 584 | sector_t len, int flags, |
| 585 | struct partition_meta_info | ||
| 586 | *info); | ||
| 537 | extern void delete_partition(struct gendisk *, int); | 587 | extern void delete_partition(struct gendisk *, int); |
| 538 | extern void printk_all_partitions(void); | 588 | extern void printk_all_partitions(void); |
| 539 | 589 | ||
diff --git a/include/linux/init.h b/include/linux/init.h index de994304e0bb..577671c55153 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -46,16 +46,23 @@ | |||
| 46 | #define __exitdata __section(.exit.data) | 46 | #define __exitdata __section(.exit.data) |
| 47 | #define __exit_call __used __section(.exitcall.exit) | 47 | #define __exit_call __used __section(.exitcall.exit) |
| 48 | 48 | ||
| 49 | /* modpost check for section mismatches during the kernel build. | 49 | /* |
| 50 | * modpost check for section mismatches during the kernel build. | ||
| 50 | * A section mismatch happens when there are references from a | 51 | * A section mismatch happens when there are references from a |
| 51 | * code or data section to an init section (both code or data). | 52 | * code or data section to an init section (both code or data). |
| 52 | * The init sections are (for most archs) discarded by the kernel | 53 | * The init sections are (for most archs) discarded by the kernel |
| 53 | * when early init has completed so all such references are potential bugs. | 54 | * when early init has completed so all such references are potential bugs. |
| 54 | * For exit sections the same issue exists. | 55 | * For exit sections the same issue exists. |
| 56 | * | ||
| 55 | * The following markers are used for the cases where the reference to | 57 | * The following markers are used for the cases where the reference to |
| 56 | * the *init / *exit section (code or data) is valid and will teach | 58 | * the *init / *exit section (code or data) is valid and will teach |
| 57 | * modpost not to issue a warning. | 59 | * modpost not to issue a warning. Intended semantics is that a code or |
| 58 | * The markers follow same syntax rules as __init / __initdata. */ | 60 | * data tagged __ref* can reference code or data from init section without |
| 61 | * producing a warning (of course, no warning does not mean code is | ||
| 62 | * correct, so optimally document why the __ref is needed and why it's OK). | ||
| 63 | * | ||
| 64 | * The markers follow same syntax rules as __init / __initdata. | ||
| 65 | */ | ||
| 59 | #define __ref __section(.ref.text) noinline | 66 | #define __ref __section(.ref.text) noinline |
| 60 | #define __refdata __section(.ref.data) | 67 | #define __refdata __section(.ref.data) |
| 61 | #define __refconst __section(.ref.rodata) | 68 | #define __refconst __section(.ref.rodata) |
diff --git a/include/linux/kdb.h b/include/linux/kdb.h index ea6e5244ed3f..aadff7cc2b84 100644 --- a/include/linux/kdb.h +++ b/include/linux/kdb.h | |||
| @@ -28,6 +28,41 @@ extern int kdb_poll_idx; | |||
| 28 | extern int kdb_initial_cpu; | 28 | extern int kdb_initial_cpu; |
| 29 | extern atomic_t kdb_event; | 29 | extern atomic_t kdb_event; |
| 30 | 30 | ||
| 31 | /* Types and messages used for dynamically added kdb shell commands */ | ||
| 32 | |||
| 33 | #define KDB_MAXARGS 16 /* Maximum number of arguments to a function */ | ||
| 34 | |||
| 35 | typedef enum { | ||
| 36 | KDB_REPEAT_NONE = 0, /* Do not repeat this command */ | ||
| 37 | KDB_REPEAT_NO_ARGS, /* Repeat the command without arguments */ | ||
| 38 | KDB_REPEAT_WITH_ARGS, /* Repeat the command including its arguments */ | ||
| 39 | } kdb_repeat_t; | ||
| 40 | |||
| 41 | typedef int (*kdb_func_t)(int, const char **); | ||
| 42 | |||
| 43 | /* KDB return codes from a command or internal kdb function */ | ||
| 44 | #define KDB_NOTFOUND (-1) | ||
| 45 | #define KDB_ARGCOUNT (-2) | ||
| 46 | #define KDB_BADWIDTH (-3) | ||
| 47 | #define KDB_BADRADIX (-4) | ||
| 48 | #define KDB_NOTENV (-5) | ||
| 49 | #define KDB_NOENVVALUE (-6) | ||
| 50 | #define KDB_NOTIMP (-7) | ||
| 51 | #define KDB_ENVFULL (-8) | ||
| 52 | #define KDB_ENVBUFFULL (-9) | ||
| 53 | #define KDB_TOOMANYBPT (-10) | ||
| 54 | #define KDB_TOOMANYDBREGS (-11) | ||
| 55 | #define KDB_DUPBPT (-12) | ||
| 56 | #define KDB_BPTNOTFOUND (-13) | ||
| 57 | #define KDB_BADMODE (-14) | ||
| 58 | #define KDB_BADINT (-15) | ||
| 59 | #define KDB_INVADDRFMT (-16) | ||
| 60 | #define KDB_BADREG (-17) | ||
| 61 | #define KDB_BADCPUNUM (-18) | ||
| 62 | #define KDB_BADLENGTH (-19) | ||
| 63 | #define KDB_NOBP (-20) | ||
| 64 | #define KDB_BADADDR (-21) | ||
| 65 | |||
| 31 | /* | 66 | /* |
| 32 | * kdb_diemsg | 67 | * kdb_diemsg |
| 33 | * | 68 | * |
| @@ -104,10 +139,26 @@ int kdb_process_cpu(const struct task_struct *p) | |||
| 104 | 139 | ||
| 105 | /* kdb access to register set for stack dumping */ | 140 | /* kdb access to register set for stack dumping */ |
| 106 | extern struct pt_regs *kdb_current_regs; | 141 | extern struct pt_regs *kdb_current_regs; |
| 142 | #ifdef CONFIG_KALLSYMS | ||
| 143 | extern const char *kdb_walk_kallsyms(loff_t *pos); | ||
| 144 | #else /* ! CONFIG_KALLSYMS */ | ||
| 145 | static inline const char *kdb_walk_kallsyms(loff_t *pos) | ||
| 146 | { | ||
| 147 | return NULL; | ||
| 148 | } | ||
| 149 | #endif /* ! CONFIG_KALLSYMS */ | ||
| 107 | 150 | ||
| 151 | /* Dynamic kdb shell command registration */ | ||
| 152 | extern int kdb_register(char *, kdb_func_t, char *, char *, short); | ||
| 153 | extern int kdb_register_repeat(char *, kdb_func_t, char *, char *, | ||
| 154 | short, kdb_repeat_t); | ||
| 155 | extern int kdb_unregister(char *); | ||
| 108 | #else /* ! CONFIG_KGDB_KDB */ | 156 | #else /* ! CONFIG_KGDB_KDB */ |
| 109 | #define kdb_printf(...) | 157 | #define kdb_printf(...) |
| 110 | #define kdb_init(x) | 158 | #define kdb_init(x) |
| 159 | #define kdb_register(...) | ||
| 160 | #define kdb_register_repeat(...) | ||
| 161 | #define kdb_uregister(x) | ||
| 111 | #endif /* CONFIG_KGDB_KDB */ | 162 | #endif /* CONFIG_KGDB_KDB */ |
| 112 | enum { | 163 | enum { |
| 113 | KDB_NOT_INITIALIZED, | 164 | KDB_NOT_INITIALIZED, |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 1759ba5adce8..edef168a0406 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -652,6 +652,16 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 652 | _max1 > _max2 ? _max1 : _max2; }) | 652 | _max1 > _max2 ? _max1 : _max2; }) |
| 653 | 653 | ||
| 654 | /** | 654 | /** |
| 655 | * min_not_zero - return the minimum that is _not_ zero, unless both are zero | ||
| 656 | * @x: value1 | ||
| 657 | * @y: value2 | ||
| 658 | */ | ||
| 659 | #define min_not_zero(x, y) ({ \ | ||
| 660 | typeof(x) __x = (x); \ | ||
| 661 | typeof(y) __y = (y); \ | ||
| 662 | __x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); }) | ||
| 663 | |||
| 664 | /** | ||
| 655 | * clamp - return a value clamped to a given range with strict typechecking | 665 | * clamp - return a value clamped to a given range with strict typechecking |
| 656 | * @val: current value | 666 | * @val: current value |
| 657 | * @min: minimum allowable value | 667 | * @min: minimum allowable value |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 7950a37a7146..8f6d12151048 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
| @@ -191,6 +191,8 @@ static inline struct kobj_type *get_ktype(struct kobject *kobj) | |||
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | extern struct kobject *kset_find_obj(struct kset *, const char *); | 193 | extern struct kobject *kset_find_obj(struct kset *, const char *); |
| 194 | extern struct kobject *kset_find_obj_hinted(struct kset *, const char *, | ||
| 195 | struct kobject *); | ||
| 194 | 196 | ||
| 195 | /* The global /sys/kernel/ kobject for people to chain off of */ | 197 | /* The global /sys/kernel/ kobject for people to chain off of */ |
| 196 | extern struct kobject *kernel_kobj; | 198 | extern struct kobject *kernel_kobj; |
diff --git a/include/linux/memory.h b/include/linux/memory.h index 85582e1bcee9..06c1fa0a5c7b 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | struct memory_block { | 23 | struct memory_block { |
| 24 | unsigned long phys_index; | 24 | unsigned long phys_index; |
| 25 | unsigned long state; | 25 | unsigned long state; |
| 26 | int section_count; | ||
| 27 | |||
| 26 | /* | 28 | /* |
| 27 | * This serializes all state change requests. It isn't | 29 | * This serializes all state change requests. It isn't |
| 28 | * held during creation because the control files are | 30 | * held during creation because the control files are |
| @@ -113,6 +115,8 @@ extern int memory_dev_init(void); | |||
| 113 | extern int remove_memory_block(unsigned long, struct mem_section *, int); | 115 | extern int remove_memory_block(unsigned long, struct mem_section *, int); |
| 114 | extern int memory_notify(unsigned long val, void *v); | 116 | extern int memory_notify(unsigned long val, void *v); |
| 115 | extern int memory_isolate_notify(unsigned long val, void *v); | 117 | extern int memory_isolate_notify(unsigned long val, void *v); |
| 118 | extern struct memory_block *find_memory_block_hinted(struct mem_section *, | ||
| 119 | struct memory_block *); | ||
| 116 | extern struct memory_block *find_memory_block(struct mem_section *); | 120 | extern struct memory_block *find_memory_block(struct mem_section *); |
| 117 | #define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT) | 121 | #define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT) |
| 118 | enum mem_add_context { BOOT, HOTPLUG }; | 122 | enum mem_add_context { BOOT, HOTPLUG }; |
diff --git a/include/linux/mtio.h b/include/linux/mtio.h index ef01d6aa5934..8f825756c459 100644 --- a/include/linux/mtio.h +++ b/include/linux/mtio.h | |||
| @@ -63,6 +63,7 @@ struct mtop { | |||
| 63 | #define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */ | 63 | #define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */ |
| 64 | #define MTSETPART 33 /* Change the active tape partition */ | 64 | #define MTSETPART 33 /* Change the active tape partition */ |
| 65 | #define MTMKPART 34 /* Format the tape with one or two partitions */ | 65 | #define MTMKPART 34 /* Format the tape with one or two partitions */ |
| 66 | #define MTWEOFI 35 /* write an end-of-file record (mark) in immediate mode */ | ||
| 66 | 67 | ||
| 67 | /* structure for MTIOCGET - mag tape get status command */ | 68 | /* structure for MTIOCGET - mag tape get status command */ |
| 68 | 69 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index dad30734432a..e4471b27c396 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -743,6 +743,7 @@ | |||
| 743 | #define PCI_DEVICE_ID_HP_CISSC 0x3230 | 743 | #define PCI_DEVICE_ID_HP_CISSC 0x3230 |
| 744 | #define PCI_DEVICE_ID_HP_CISSD 0x3238 | 744 | #define PCI_DEVICE_ID_HP_CISSD 0x3238 |
| 745 | #define PCI_DEVICE_ID_HP_CISSE 0x323a | 745 | #define PCI_DEVICE_ID_HP_CISSE 0x323a |
| 746 | #define PCI_DEVICE_ID_HP_CISSF 0x323b | ||
| 746 | #define PCI_DEVICE_ID_HP_ZX2_IOC 0x4031 | 747 | #define PCI_DEVICE_ID_HP_ZX2_IOC 0x4031 |
| 747 | 748 | ||
| 748 | #define PCI_VENDOR_ID_PCTECH 0x1042 | 749 | #define PCI_VENDOR_ID_PCTECH 0x1042 |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 0eb50832aa00..5095b834a6fb 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -48,10 +48,8 @@ | |||
| 48 | preempt_enable(); \ | 48 | preempt_enable(); \ |
| 49 | } while (0) | 49 | } while (0) |
| 50 | 50 | ||
| 51 | #ifdef CONFIG_SMP | ||
| 52 | |||
| 53 | /* minimum unit size, also is the maximum supported allocation size */ | 51 | /* minimum unit size, also is the maximum supported allocation size */ |
| 54 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) | 52 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(32 << 10) |
| 55 | 53 | ||
| 56 | /* | 54 | /* |
| 57 | * Percpu allocator can serve percpu allocations before slab is | 55 | * Percpu allocator can serve percpu allocations before slab is |
| @@ -146,37 +144,20 @@ extern int __init pcpu_page_first_chunk(size_t reserved_size, | |||
| 146 | * dynamically allocated. Non-atomic access to the current CPU's | 144 | * dynamically allocated. Non-atomic access to the current CPU's |
| 147 | * version should probably be combined with get_cpu()/put_cpu(). | 145 | * version should probably be combined with get_cpu()/put_cpu(). |
| 148 | */ | 146 | */ |
| 147 | #ifdef CONFIG_SMP | ||
| 149 | #define per_cpu_ptr(ptr, cpu) SHIFT_PERCPU_PTR((ptr), per_cpu_offset((cpu))) | 148 | #define per_cpu_ptr(ptr, cpu) SHIFT_PERCPU_PTR((ptr), per_cpu_offset((cpu))) |
| 149 | #else | ||
| 150 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR((ptr)); }) | ||
| 151 | #endif | ||
| 150 | 152 | ||
| 151 | extern void __percpu *__alloc_reserved_percpu(size_t size, size_t align); | 153 | extern void __percpu *__alloc_reserved_percpu(size_t size, size_t align); |
| 152 | extern bool is_kernel_percpu_address(unsigned long addr); | 154 | extern bool is_kernel_percpu_address(unsigned long addr); |
| 153 | 155 | ||
| 154 | #ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA | 156 | #if !defined(CONFIG_SMP) || !defined(CONFIG_HAVE_SETUP_PER_CPU_AREA) |
| 155 | extern void __init setup_per_cpu_areas(void); | 157 | extern void __init setup_per_cpu_areas(void); |
| 156 | #endif | 158 | #endif |
| 157 | extern void __init percpu_init_late(void); | 159 | extern void __init percpu_init_late(void); |
| 158 | 160 | ||
| 159 | #else /* CONFIG_SMP */ | ||
| 160 | |||
| 161 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR((ptr)); }) | ||
| 162 | |||
| 163 | /* can't distinguish from other static vars, always false */ | ||
| 164 | static inline bool is_kernel_percpu_address(unsigned long addr) | ||
| 165 | { | ||
| 166 | return false; | ||
| 167 | } | ||
| 168 | |||
| 169 | static inline void __init setup_per_cpu_areas(void) { } | ||
| 170 | |||
| 171 | static inline void __init percpu_init_late(void) { } | ||
| 172 | |||
| 173 | static inline void *pcpu_lpage_remapped(void *kaddr) | ||
| 174 | { | ||
| 175 | return NULL; | ||
| 176 | } | ||
| 177 | |||
| 178 | #endif /* CONFIG_SMP */ | ||
| 179 | |||
| 180 | extern void __percpu *__alloc_percpu(size_t size, size_t align); | 161 | extern void __percpu *__alloc_percpu(size_t size, size_t align); |
| 181 | extern void free_percpu(void __percpu *__pdata); | 162 | extern void free_percpu(void __percpu *__pdata); |
| 182 | extern phys_addr_t per_cpu_ptr_to_phys(void *addr); | 163 | extern phys_addr_t per_cpu_ptr_to_phys(void *addr); |
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index d7ecad0093bb..2e700ec0601f 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
| @@ -138,6 +138,9 @@ extern struct platform_device *platform_create_bundle(struct platform_driver *dr | |||
| 138 | struct resource *res, unsigned int n_res, | 138 | struct resource *res, unsigned int n_res, |
| 139 | const void *data, size_t size); | 139 | const void *data, size_t size); |
| 140 | 140 | ||
| 141 | extern const struct dev_pm_ops * platform_bus_get_pm_ops(void); | ||
| 142 | extern void platform_bus_set_pm_ops(const struct dev_pm_ops *pm); | ||
| 143 | |||
| 141 | /* early platform driver interface */ | 144 | /* early platform driver interface */ |
| 142 | struct early_platform_driver { | 145 | struct early_platform_driver { |
| 143 | const char *class_str; | 146 | const char *class_str; |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 0383601a927c..56154bbb8da9 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -336,6 +336,9 @@ extern unsigned long sysctl_hung_task_warnings; | |||
| 336 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, | 336 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, |
| 337 | void __user *buffer, | 337 | void __user *buffer, |
| 338 | size_t *lenp, loff_t *ppos); | 338 | size_t *lenp, loff_t *ppos); |
| 339 | #else | ||
| 340 | /* Avoid need for ifdefs elsewhere in the code */ | ||
| 341 | enum { sysctl_hung_task_timeout_secs = 0 }; | ||
| 339 | #endif | 342 | #endif |
| 340 | 343 | ||
| 341 | /* Attach to any functions which should be ignored in wchan output. */ | 344 | /* Attach to any functions which should be ignored in wchan output. */ |
diff --git a/include/linux/selection.h b/include/linux/selection.h index 8cdaa1151d2e..85193aa8c1e3 100644 --- a/include/linux/selection.h +++ b/include/linux/selection.h | |||
| @@ -39,5 +39,6 @@ extern void putconsxy(struct vc_data *vc, unsigned char *p); | |||
| 39 | 39 | ||
| 40 | extern u16 vcs_scr_readw(struct vc_data *vc, const u16 *org); | 40 | extern u16 vcs_scr_readw(struct vc_data *vc, const u16 *org); |
| 41 | extern void vcs_scr_writew(struct vc_data *vc, u16 val, u16 *org); | 41 | extern void vcs_scr_writew(struct vc_data *vc, u16 val, u16 *org); |
| 42 | extern void vcs_scr_updated(struct vc_data *vc); | ||
| 42 | 43 | ||
| 43 | #endif | 44 | #endif |
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index 7638deaaba65..97f5b45bbc07 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
| @@ -35,6 +35,8 @@ struct plat_serial8250_port { | |||
| 35 | void (*set_termios)(struct uart_port *, | 35 | void (*set_termios)(struct uart_port *, |
| 36 | struct ktermios *new, | 36 | struct ktermios *new, |
| 37 | struct ktermios *old); | 37 | struct ktermios *old); |
| 38 | void (*pm)(struct uart_port *, unsigned int state, | ||
| 39 | unsigned old); | ||
| 38 | }; | 40 | }; |
| 39 | 41 | ||
| 40 | /* | 42 | /* |
| @@ -76,5 +78,11 @@ extern int serial8250_find_port_for_earlycon(void); | |||
| 76 | extern int setup_early_serial8250_console(char *cmdline); | 78 | extern int setup_early_serial8250_console(char *cmdline); |
| 77 | extern void serial8250_do_set_termios(struct uart_port *port, | 79 | extern void serial8250_do_set_termios(struct uart_port *port, |
| 78 | struct ktermios *termios, struct ktermios *old); | 80 | struct ktermios *termios, struct ktermios *old); |
| 81 | extern void serial8250_do_pm(struct uart_port *port, unsigned int state, | ||
| 82 | unsigned int oldstate); | ||
| 83 | |||
| 84 | extern void serial8250_set_isa_configurator(void (*v) | ||
| 85 | (int port, struct uart_port *up, | ||
| 86 | unsigned short *capabilities)); | ||
| 79 | 87 | ||
| 80 | #endif | 88 | #endif |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 563e23400913..99e5994e6f84 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -289,6 +289,8 @@ struct uart_port { | |||
| 289 | void (*set_termios)(struct uart_port *, | 289 | void (*set_termios)(struct uart_port *, |
| 290 | struct ktermios *new, | 290 | struct ktermios *new, |
| 291 | struct ktermios *old); | 291 | struct ktermios *old); |
| 292 | void (*pm)(struct uart_port *, unsigned int state, | ||
| 293 | unsigned int old); | ||
| 292 | unsigned int irq; /* irq number */ | 294 | unsigned int irq; /* irq number */ |
| 293 | unsigned long irqflags; /* irq flags */ | 295 | unsigned long irqflags; /* irq flags */ |
| 294 | unsigned int uartclk; /* base uart clock */ | 296 | unsigned int uartclk; /* base uart clock */ |
| @@ -411,6 +413,14 @@ unsigned int uart_get_baud_rate(struct uart_port *port, struct ktermios *termios | |||
| 411 | unsigned int max); | 413 | unsigned int max); |
| 412 | unsigned int uart_get_divisor(struct uart_port *port, unsigned int baud); | 414 | unsigned int uart_get_divisor(struct uart_port *port, unsigned int baud); |
| 413 | 415 | ||
| 416 | /* Base timer interval for polling */ | ||
| 417 | static inline int uart_poll_timeout(struct uart_port *port) | ||
| 418 | { | ||
| 419 | int timeout = port->timeout; | ||
| 420 | |||
| 421 | return timeout > 6 ? (timeout / 2 - 2) : 1; | ||
| 422 | } | ||
| 423 | |||
| 414 | /* | 424 | /* |
| 415 | * Console helpers. | 425 | * Console helpers. |
| 416 | */ | 426 | */ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 67d64e6efe7a..86be0cdeb11b 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -256,6 +256,7 @@ struct tty_operations; | |||
| 256 | struct tty_struct { | 256 | struct tty_struct { |
| 257 | int magic; | 257 | int magic; |
| 258 | struct kref kref; | 258 | struct kref kref; |
| 259 | struct device *dev; | ||
| 259 | struct tty_driver *driver; | 260 | struct tty_driver *driver; |
| 260 | const struct tty_operations *ops; | 261 | const struct tty_operations *ops; |
| 261 | int index; | 262 | int index; |
| @@ -465,7 +466,7 @@ extern void proc_clear_tty(struct task_struct *p); | |||
| 465 | extern struct tty_struct *get_current_tty(void); | 466 | extern struct tty_struct *get_current_tty(void); |
| 466 | extern void tty_default_fops(struct file_operations *fops); | 467 | extern void tty_default_fops(struct file_operations *fops); |
| 467 | extern struct tty_struct *alloc_tty_struct(void); | 468 | extern struct tty_struct *alloc_tty_struct(void); |
| 468 | extern void tty_add_file(struct tty_struct *tty, struct file *file); | 469 | extern int tty_add_file(struct tty_struct *tty, struct file *file); |
| 469 | extern void free_tty_struct(struct tty_struct *tty); | 470 | extern void free_tty_struct(struct tty_struct *tty); |
| 470 | extern void initialize_tty_struct(struct tty_struct *tty, | 471 | extern void initialize_tty_struct(struct tty_struct *tty, |
| 471 | struct tty_driver *driver, int idx); | 472 | struct tty_driver *driver, int idx); |
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h index b08677982525..db2d227694da 100644 --- a/include/linux/tty_driver.h +++ b/include/linux/tty_driver.h | |||
| @@ -224,6 +224,12 @@ | |||
| 224 | * unless the tty also has a valid tty->termiox pointer. | 224 | * unless the tty also has a valid tty->termiox pointer. |
| 225 | * | 225 | * |
| 226 | * Optional: Called under the termios lock | 226 | * Optional: Called under the termios lock |
| 227 | * | ||
| 228 | * int (*get_icount)(struct tty_struct *tty, struct serial_icounter *icount); | ||
| 229 | * | ||
| 230 | * Called when the device receives a TIOCGICOUNT ioctl. Passed a kernel | ||
| 231 | * structure to complete. This method is optional and will only be called | ||
| 232 | * if provided (otherwise EINVAL will be returned). | ||
| 227 | */ | 233 | */ |
| 228 | 234 | ||
| 229 | #include <linux/fs.h> | 235 | #include <linux/fs.h> |
| @@ -232,6 +238,7 @@ | |||
| 232 | 238 | ||
| 233 | struct tty_struct; | 239 | struct tty_struct; |
| 234 | struct tty_driver; | 240 | struct tty_driver; |
| 241 | struct serial_icounter_struct; | ||
| 235 | 242 | ||
| 236 | struct tty_operations { | 243 | struct tty_operations { |
| 237 | struct tty_struct * (*lookup)(struct tty_driver *driver, | 244 | struct tty_struct * (*lookup)(struct tty_driver *driver, |
| @@ -268,6 +275,8 @@ struct tty_operations { | |||
| 268 | unsigned int set, unsigned int clear); | 275 | unsigned int set, unsigned int clear); |
| 269 | int (*resize)(struct tty_struct *tty, struct winsize *ws); | 276 | int (*resize)(struct tty_struct *tty, struct winsize *ws); |
| 270 | int (*set_termiox)(struct tty_struct *tty, struct termiox *tnew); | 277 | int (*set_termiox)(struct tty_struct *tty, struct termiox *tnew); |
| 278 | int (*get_icount)(struct tty_struct *tty, | ||
| 279 | struct serial_icounter_struct *icount); | ||
| 271 | #ifdef CONFIG_CONSOLE_POLL | 280 | #ifdef CONFIG_CONSOLE_POLL |
| 272 | int (*poll_init)(struct tty_driver *driver, int line, char *options); | 281 | int (*poll_init)(struct tty_driver *driver, int line, char *options); |
| 273 | int (*poll_get_char)(struct tty_driver *driver, int line); | 282 | int (*poll_get_char)(struct tty_driver *driver, int line); |
diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h index 5dcc9ff72f69..d6188e5a52df 100644 --- a/include/linux/uio_driver.h +++ b/include/linux/uio_driver.h | |||
| @@ -108,7 +108,7 @@ extern void uio_event_notify(struct uio_info *info); | |||
| 108 | 108 | ||
| 109 | /* defines for uio_info->irq */ | 109 | /* defines for uio_info->irq */ |
| 110 | #define UIO_IRQ_CUSTOM -1 | 110 | #define UIO_IRQ_CUSTOM -1 |
| 111 | #define UIO_IRQ_NONE -2 | 111 | #define UIO_IRQ_NONE 0 |
| 112 | 112 | ||
| 113 | /* defines for uio_mem->memtype */ | 113 | /* defines for uio_mem->memtype */ |
| 114 | #define UIO_MEM_NONE 0 | 114 | #define UIO_MEM_NONE 0 |
diff --git a/include/linux/usb/cdc.h b/include/linux/usb/cdc.h index c117a68d04a7..5e86dc771da4 100644 --- a/include/linux/usb/cdc.h +++ b/include/linux/usb/cdc.h | |||
| @@ -32,6 +32,8 @@ | |||
| 32 | 32 | ||
| 33 | #define USB_CDC_PROTO_EEM 7 | 33 | #define USB_CDC_PROTO_EEM 7 |
| 34 | 34 | ||
| 35 | #define USB_CDC_NCM_PROTO_NTB 1 | ||
| 36 | |||
| 35 | /*-------------------------------------------------------------------------*/ | 37 | /*-------------------------------------------------------------------------*/ |
| 36 | 38 | ||
| 37 | /* | 39 | /* |
| @@ -274,13 +276,13 @@ struct usb_cdc_notification { | |||
| 274 | /* | 276 | /* |
| 275 | * Class Specific structures and constants | 277 | * Class Specific structures and constants |
| 276 | * | 278 | * |
| 277 | * CDC NCM parameter structure, CDC NCM subclass 6.2.1 | 279 | * CDC NCM NTB parameters structure, CDC NCM subclass 6.2.1 |
| 278 | * | 280 | * |
| 279 | */ | 281 | */ |
| 280 | 282 | ||
| 281 | struct usb_cdc_ncm_ntb_parameter { | 283 | struct usb_cdc_ncm_ntb_parameters { |
| 282 | __le16 wLength; | 284 | __le16 wLength; |
| 283 | __le16 bmNtbFormatSupported; | 285 | __le16 bmNtbFormatsSupported; |
| 284 | __le32 dwNtbInMaxSize; | 286 | __le32 dwNtbInMaxSize; |
| 285 | __le16 wNdpInDivisor; | 287 | __le16 wNdpInDivisor; |
| 286 | __le16 wNdpInPayloadRemainder; | 288 | __le16 wNdpInPayloadRemainder; |
| @@ -297,8 +299,8 @@ struct usb_cdc_ncm_ntb_parameter { | |||
| 297 | * CDC NCM transfer headers, CDC NCM subclass 3.2 | 299 | * CDC NCM transfer headers, CDC NCM subclass 3.2 |
| 298 | */ | 300 | */ |
| 299 | 301 | ||
| 300 | #define NCM_NTH16_SIGN 0x484D434E /* NCMH */ | 302 | #define USB_CDC_NCM_NTH16_SIGN 0x484D434E /* NCMH */ |
| 301 | #define NCM_NTH32_SIGN 0x686D636E /* ncmh */ | 303 | #define USB_CDC_NCM_NTH32_SIGN 0x686D636E /* ncmh */ |
| 302 | 304 | ||
| 303 | struct usb_cdc_ncm_nth16 { | 305 | struct usb_cdc_ncm_nth16 { |
| 304 | __le32 dwSignature; | 306 | __le32 dwSignature; |
| @@ -320,25 +322,78 @@ struct usb_cdc_ncm_nth32 { | |||
| 320 | * CDC NCM datagram pointers, CDC NCM subclass 3.3 | 322 | * CDC NCM datagram pointers, CDC NCM subclass 3.3 |
| 321 | */ | 323 | */ |
| 322 | 324 | ||
| 323 | #define NCM_NDP16_CRC_SIGN 0x314D434E /* NCM1 */ | 325 | #define USB_CDC_NCM_NDP16_CRC_SIGN 0x314D434E /* NCM1 */ |
| 324 | #define NCM_NDP16_NOCRC_SIGN 0x304D434E /* NCM0 */ | 326 | #define USB_CDC_NCM_NDP16_NOCRC_SIGN 0x304D434E /* NCM0 */ |
| 325 | #define NCM_NDP32_CRC_SIGN 0x316D636E /* ncm1 */ | 327 | #define USB_CDC_NCM_NDP32_CRC_SIGN 0x316D636E /* ncm1 */ |
| 326 | #define NCM_NDP32_NOCRC_SIGN 0x306D636E /* ncm0 */ | 328 | #define USB_CDC_NCM_NDP32_NOCRC_SIGN 0x306D636E /* ncm0 */ |
| 329 | |||
| 330 | /* 16-bit NCM Datagram Pointer Entry */ | ||
| 331 | struct usb_cdc_ncm_dpe16 { | ||
| 332 | __le16 wDatagramIndex; | ||
| 333 | __le16 wDatagramLength; | ||
| 334 | } __attribute__((__packed__)); | ||
| 327 | 335 | ||
| 336 | /* 16-bit NCM Datagram Pointer Table */ | ||
| 328 | struct usb_cdc_ncm_ndp16 { | 337 | struct usb_cdc_ncm_ndp16 { |
| 329 | __le32 dwSignature; | 338 | __le32 dwSignature; |
| 330 | __le16 wLength; | 339 | __le16 wLength; |
| 331 | __le16 wNextFpIndex; | 340 | __le16 wNextFpIndex; |
| 332 | __u8 data[0]; | 341 | struct usb_cdc_ncm_dpe16 dpe16[0]; |
| 333 | } __attribute__ ((packed)); | 342 | } __attribute__ ((packed)); |
| 334 | 343 | ||
| 344 | /* 32-bit NCM Datagram Pointer Entry */ | ||
| 345 | struct usb_cdc_ncm_dpe32 { | ||
| 346 | __le32 dwDatagramIndex; | ||
| 347 | __le32 dwDatagramLength; | ||
| 348 | } __attribute__((__packed__)); | ||
| 349 | |||
| 350 | /* 32-bit NCM Datagram Pointer Table */ | ||
| 335 | struct usb_cdc_ncm_ndp32 { | 351 | struct usb_cdc_ncm_ndp32 { |
| 336 | __le32 dwSignature; | 352 | __le32 dwSignature; |
| 337 | __le16 wLength; | 353 | __le16 wLength; |
| 338 | __le16 wReserved6; | 354 | __le16 wReserved6; |
| 339 | __le32 dwNextFpIndex; | 355 | __le32 dwNextNdpIndex; |
| 340 | __le32 dwReserved12; | 356 | __le32 dwReserved12; |
| 341 | __u8 data[0]; | 357 | struct usb_cdc_ncm_dpe32 dpe32[0]; |
| 342 | } __attribute__ ((packed)); | 358 | } __attribute__ ((packed)); |
| 343 | 359 | ||
| 360 | /* CDC NCM subclass 3.2.1 and 3.2.2 */ | ||
| 361 | #define USB_CDC_NCM_NDP16_INDEX_MIN 0x000C | ||
| 362 | #define USB_CDC_NCM_NDP32_INDEX_MIN 0x0010 | ||
| 363 | |||
| 364 | /* CDC NCM subclass 3.3.3 Datagram Formatting */ | ||
| 365 | #define USB_CDC_NCM_DATAGRAM_FORMAT_CRC 0x30 | ||
| 366 | #define USB_CDC_NCM_DATAGRAM_FORMAT_NOCRC 0X31 | ||
| 367 | |||
| 368 | /* CDC NCM subclass 4.2 NCM Communications Interface Protocol Code */ | ||
| 369 | #define USB_CDC_NCM_PROTO_CODE_NO_ENCAP_COMMANDS 0x00 | ||
| 370 | #define USB_CDC_NCM_PROTO_CODE_EXTERN_PROTO 0xFE | ||
| 371 | |||
| 372 | /* CDC NCM subclass 5.2.1 NCM Functional Descriptor, bmNetworkCapabilities */ | ||
| 373 | #define USB_CDC_NCM_NCAP_ETH_FILTER (1 << 0) | ||
| 374 | #define USB_CDC_NCM_NCAP_NET_ADDRESS (1 << 1) | ||
| 375 | #define USB_CDC_NCM_NCAP_ENCAP_COMMAND (1 << 2) | ||
| 376 | #define USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE (1 << 3) | ||
| 377 | #define USB_CDC_NCM_NCAP_CRC_MODE (1 << 4) | ||
| 378 | |||
| 379 | /* CDC NCM subclass Table 6-3: NTB Parameter Structure */ | ||
| 380 | #define USB_CDC_NCM_NTB16_SUPPORTED (1 << 0) | ||
| 381 | #define USB_CDC_NCM_NTB32_SUPPORTED (1 << 1) | ||
| 382 | |||
| 383 | /* CDC NCM subclass Table 6-3: NTB Parameter Structure */ | ||
| 384 | #define USB_CDC_NCM_NDP_ALIGN_MIN_SIZE 0x04 | ||
| 385 | #define USB_CDC_NCM_NTB_MAX_LENGTH 0x1C | ||
| 386 | |||
| 387 | /* CDC NCM subclass 6.2.5 SetNtbFormat */ | ||
| 388 | #define USB_CDC_NCM_NTB16_FORMAT 0x00 | ||
| 389 | #define USB_CDC_NCM_NTB32_FORMAT 0x01 | ||
| 390 | |||
| 391 | /* CDC NCM subclass 6.2.7 SetNtbInputSize */ | ||
| 392 | #define USB_CDC_NCM_NTB_MIN_IN_SIZE 2048 | ||
| 393 | #define USB_CDC_NCM_NTB_MIN_OUT_SIZE 2048 | ||
| 394 | |||
| 395 | /* CDC NCM subclass 6.2.11 SetCrcMode */ | ||
| 396 | #define USB_CDC_NCM_CRC_NOT_APPENDED 0x00 | ||
| 397 | #define USB_CDC_NCM_CRC_APPENDED 0x01 | ||
| 398 | |||
| 344 | #endif /* __LINUX_USB_CDC_H */ | 399 | #endif /* __LINUX_USB_CDC_H */ |
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index da2ed77d3e8d..f917bbbc8901 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
| @@ -123,8 +123,23 @@ | |||
| 123 | #define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */ | 123 | #define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */ |
| 124 | #define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */ | 124 | #define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */ |
| 125 | 125 | ||
| 126 | /* | ||
| 127 | * New Feature Selectors as added by USB 3.0 | ||
| 128 | * See USB 3.0 spec Table 9-6 | ||
| 129 | */ | ||
| 130 | #define USB_DEVICE_U1_ENABLE 48 /* dev may initiate U1 transition */ | ||
| 131 | #define USB_DEVICE_U2_ENABLE 49 /* dev may initiate U2 transition */ | ||
| 132 | #define USB_DEVICE_LTM_ENABLE 50 /* dev may send LTM */ | ||
| 133 | #define USB_INTRF_FUNC_SUSPEND 0 /* function suspend */ | ||
| 134 | |||
| 135 | #define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00 | ||
| 136 | |||
| 126 | #define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ | 137 | #define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ |
| 127 | 138 | ||
| 139 | /* Bit array elements as returned by the USB_REQ_GET_STATUS request. */ | ||
| 140 | #define USB_DEV_STAT_U1_ENABLED 2 /* transition into U1 state */ | ||
| 141 | #define USB_DEV_STAT_U2_ENABLED 3 /* transition into U2 state */ | ||
| 142 | #define USB_DEV_STAT_LTM_ENABLED 4 /* Latency tolerance messages */ | ||
| 128 | 143 | ||
| 129 | /** | 144 | /** |
| 130 | * struct usb_ctrlrequest - SETUP data for a USB device control request | 145 | * struct usb_ctrlrequest - SETUP data for a USB device control request |
| @@ -675,6 +690,7 @@ struct usb_bos_descriptor { | |||
| 675 | __u8 bNumDeviceCaps; | 690 | __u8 bNumDeviceCaps; |
| 676 | } __attribute__((packed)); | 691 | } __attribute__((packed)); |
| 677 | 692 | ||
| 693 | #define USB_DT_BOS_SIZE 5 | ||
| 678 | /*-------------------------------------------------------------------------*/ | 694 | /*-------------------------------------------------------------------------*/ |
| 679 | 695 | ||
| 680 | /* USB_DT_DEVICE_CAPABILITY: grouped with BOS */ | 696 | /* USB_DT_DEVICE_CAPABILITY: grouped with BOS */ |
| @@ -712,16 +728,56 @@ struct usb_wireless_cap_descriptor { /* Ultra Wide Band */ | |||
| 712 | __u8 bReserved; | 728 | __u8 bReserved; |
| 713 | } __attribute__((packed)); | 729 | } __attribute__((packed)); |
| 714 | 730 | ||
| 731 | /* USB 2.0 Extension descriptor */ | ||
| 715 | #define USB_CAP_TYPE_EXT 2 | 732 | #define USB_CAP_TYPE_EXT 2 |
| 716 | 733 | ||
| 717 | struct usb_ext_cap_descriptor { /* Link Power Management */ | 734 | struct usb_ext_cap_descriptor { /* Link Power Management */ |
| 718 | __u8 bLength; | 735 | __u8 bLength; |
| 719 | __u8 bDescriptorType; | 736 | __u8 bDescriptorType; |
| 720 | __u8 bDevCapabilityType; | 737 | __u8 bDevCapabilityType; |
| 721 | __u8 bmAttributes; | 738 | __le32 bmAttributes; |
| 722 | #define USB_LPM_SUPPORT (1 << 1) /* supports LPM */ | 739 | #define USB_LPM_SUPPORT (1 << 1) /* supports LPM */ |
| 723 | } __attribute__((packed)); | 740 | } __attribute__((packed)); |
| 724 | 741 | ||
| 742 | #define USB_DT_USB_EXT_CAP_SIZE 7 | ||
| 743 | |||
| 744 | /* | ||
| 745 | * SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB | ||
| 746 | * specific device level capabilities | ||
| 747 | */ | ||
| 748 | #define USB_SS_CAP_TYPE 3 | ||
| 749 | struct usb_ss_cap_descriptor { /* Link Power Management */ | ||
| 750 | __u8 bLength; | ||
| 751 | __u8 bDescriptorType; | ||
| 752 | __u8 bDevCapabilityType; | ||
| 753 | __u8 bmAttributes; | ||
| 754 | #define USB_LTM_SUPPORT (1 << 1) /* supports LTM */ | ||
| 755 | __le16 wSpeedSupported; | ||
| 756 | #define USB_LOW_SPEED_OPERATION (1) /* Low speed operation */ | ||
| 757 | #define USB_FULL_SPEED_OPERATION (1 << 1) /* Full speed operation */ | ||
| 758 | #define USB_HIGH_SPEED_OPERATION (1 << 2) /* High speed operation */ | ||
| 759 | #define USB_5GBPS_OPERATION (1 << 3) /* Operation at 5Gbps */ | ||
| 760 | __u8 bFunctionalitySupport; | ||
| 761 | __u8 bU1devExitLat; | ||
| 762 | __le16 bU2DevExitLat; | ||
| 763 | } __attribute__((packed)); | ||
| 764 | |||
| 765 | #define USB_DT_USB_SS_CAP_SIZE 10 | ||
| 766 | |||
| 767 | /* | ||
| 768 | * Container ID Capability descriptor: Defines the instance unique ID used to | ||
| 769 | * identify the instance across all operating modes | ||
| 770 | */ | ||
| 771 | #define CONTAINER_ID_TYPE 4 | ||
| 772 | struct usb_ss_container_id_descriptor { | ||
| 773 | __u8 bLength; | ||
| 774 | __u8 bDescriptorType; | ||
| 775 | __u8 bDevCapabilityType; | ||
| 776 | __u8 bReserved; | ||
| 777 | __u8 ContainerID[16]; /* 128-bit number */ | ||
| 778 | } __attribute__((packed)); | ||
| 779 | |||
| 780 | #define USB_DT_USB_SS_CONTN_ID_SIZE 20 | ||
| 725 | /*-------------------------------------------------------------------------*/ | 781 | /*-------------------------------------------------------------------------*/ |
| 726 | 782 | ||
| 727 | /* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with | 783 | /* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with |
| @@ -808,4 +864,14 @@ enum usb_device_state { | |||
| 808 | */ | 864 | */ |
| 809 | }; | 865 | }; |
| 810 | 866 | ||
| 867 | /*-------------------------------------------------------------------------*/ | ||
| 868 | |||
| 869 | /* | ||
| 870 | * As per USB compliance update, a device that is actively drawing | ||
| 871 | * more than 100mA from USB must report itself as bus-powered in | ||
| 872 | * the GetStatus(DEVICE) call. | ||
| 873 | * http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34 | ||
| 874 | */ | ||
| 875 | #define USB_SELF_POWER_VBUS_MAX_DRAW 100 | ||
| 876 | |||
| 811 | #endif /* __LINUX_USB_CH9_H */ | 877 | #endif /* __LINUX_USB_CH9_H */ |
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index 617068134ae8..3d29a7dcac2d 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h | |||
| @@ -161,8 +161,6 @@ ep_choose(struct usb_gadget *g, struct usb_endpoint_descriptor *hs, | |||
| 161 | * and by language IDs provided in control requests. | 161 | * and by language IDs provided in control requests. |
| 162 | * @descriptors: Table of descriptors preceding all function descriptors. | 162 | * @descriptors: Table of descriptors preceding all function descriptors. |
| 163 | * Examples include OTG and vendor-specific descriptors. | 163 | * Examples include OTG and vendor-specific descriptors. |
| 164 | * @bind: Called from @usb_add_config() to allocate resources unique to this | ||
| 165 | * configuration and to call @usb_add_function() for each function used. | ||
| 166 | * @unbind: Reverses @bind; called as a side effect of unregistering the | 164 | * @unbind: Reverses @bind; called as a side effect of unregistering the |
| 167 | * driver which added this configuration. | 165 | * driver which added this configuration. |
| 168 | * @setup: Used to delegate control requests that aren't handled by standard | 166 | * @setup: Used to delegate control requests that aren't handled by standard |
| @@ -207,8 +205,7 @@ struct usb_configuration { | |||
| 207 | * we can't restructure things to avoid mismatching... | 205 | * we can't restructure things to avoid mismatching... |
| 208 | */ | 206 | */ |
| 209 | 207 | ||
| 210 | /* configuration management: bind/unbind */ | 208 | /* configuration management: unbind/setup */ |
| 211 | int (*bind)(struct usb_configuration *); | ||
| 212 | void (*unbind)(struct usb_configuration *); | 209 | void (*unbind)(struct usb_configuration *); |
| 213 | int (*setup)(struct usb_configuration *, | 210 | int (*setup)(struct usb_configuration *, |
| 214 | const struct usb_ctrlrequest *); | 211 | const struct usb_ctrlrequest *); |
| @@ -232,20 +229,24 @@ struct usb_configuration { | |||
| 232 | }; | 229 | }; |
| 233 | 230 | ||
| 234 | int usb_add_config(struct usb_composite_dev *, | 231 | int usb_add_config(struct usb_composite_dev *, |
| 235 | struct usb_configuration *); | 232 | struct usb_configuration *, |
| 233 | int (*)(struct usb_configuration *)); | ||
| 236 | 234 | ||
| 237 | /** | 235 | /** |
| 238 | * struct usb_composite_driver - groups configurations into a gadget | 236 | * struct usb_composite_driver - groups configurations into a gadget |
| 239 | * @name: For diagnostics, identifies the driver. | 237 | * @name: For diagnostics, identifies the driver. |
| 238 | * @iProduct: Used as iProduct override if @dev->iProduct is not set. | ||
| 239 | * If NULL value of @name is taken. | ||
| 240 | * @iManufacturer: Used as iManufacturer override if @dev->iManufacturer is | ||
| 241 | * not set. If NULL a default "<system> <release> with <udc>" value | ||
| 242 | * will be used. | ||
| 240 | * @dev: Template descriptor for the device, including default device | 243 | * @dev: Template descriptor for the device, including default device |
| 241 | * identifiers. | 244 | * identifiers. |
| 242 | * @strings: tables of strings, keyed by identifiers assigned during bind() | 245 | * @strings: tables of strings, keyed by identifiers assigned during bind() |
| 243 | * and language IDs provided in control requests | 246 | * and language IDs provided in control requests |
| 244 | * @bind: (REQUIRED) Used to allocate resources that are shared across the | 247 | * @needs_serial: set to 1 if the gadget needs userspace to provide |
| 245 | * whole device, such as string IDs, and add its configurations using | 248 | * a serial number. If one is not provided, warning will be printed. |
| 246 | * @usb_add_config(). This may fail by returning a negative errno | 249 | * @unbind: Reverses bind; called as a side effect of unregistering |
| 247 | * value; it should return zero on successful initialization. | ||
| 248 | * @unbind: Reverses @bind(); called as a side effect of unregistering | ||
| 249 | * this driver. | 250 | * this driver. |
| 250 | * @disconnect: optional driver disconnect method | 251 | * @disconnect: optional driver disconnect method |
| 251 | * @suspend: Notifies when the host stops sending USB traffic, | 252 | * @suspend: Notifies when the host stops sending USB traffic, |
| @@ -256,7 +257,7 @@ int usb_add_config(struct usb_composite_dev *, | |||
| 256 | * Devices default to reporting self powered operation. Devices which rely | 257 | * Devices default to reporting self powered operation. Devices which rely |
| 257 | * on bus powered operation should report this in their @bind() method. | 258 | * on bus powered operation should report this in their @bind() method. |
| 258 | * | 259 | * |
| 259 | * Before returning from @bind, various fields in the template descriptor | 260 | * Before returning from bind, various fields in the template descriptor |
| 260 | * may be overridden. These include the idVendor/idProduct/bcdDevice values | 261 | * may be overridden. These include the idVendor/idProduct/bcdDevice values |
| 261 | * normally to bind the appropriate host side driver, and the three strings | 262 | * normally to bind the appropriate host side driver, and the three strings |
| 262 | * (iManufacturer, iProduct, iSerialNumber) normally used to provide user | 263 | * (iManufacturer, iProduct, iSerialNumber) normally used to provide user |
| @@ -266,15 +267,12 @@ int usb_add_config(struct usb_composite_dev *, | |||
| 266 | */ | 267 | */ |
| 267 | struct usb_composite_driver { | 268 | struct usb_composite_driver { |
| 268 | const char *name; | 269 | const char *name; |
| 270 | const char *iProduct; | ||
| 271 | const char *iManufacturer; | ||
| 269 | const struct usb_device_descriptor *dev; | 272 | const struct usb_device_descriptor *dev; |
| 270 | struct usb_gadget_strings **strings; | 273 | struct usb_gadget_strings **strings; |
| 274 | unsigned needs_serial:1; | ||
| 271 | 275 | ||
| 272 | /* REVISIT: bind() functions can be marked __init, which | ||
| 273 | * makes trouble for section mismatch analysis. See if | ||
| 274 | * we can't restructure things to avoid mismatching... | ||
| 275 | */ | ||
| 276 | |||
| 277 | int (*bind)(struct usb_composite_dev *); | ||
| 278 | int (*unbind)(struct usb_composite_dev *); | 276 | int (*unbind)(struct usb_composite_dev *); |
| 279 | 277 | ||
| 280 | void (*disconnect)(struct usb_composite_dev *); | 278 | void (*disconnect)(struct usb_composite_dev *); |
| @@ -284,8 +282,9 @@ struct usb_composite_driver { | |||
| 284 | void (*resume)(struct usb_composite_dev *); | 282 | void (*resume)(struct usb_composite_dev *); |
| 285 | }; | 283 | }; |
| 286 | 284 | ||
| 287 | extern int usb_composite_register(struct usb_composite_driver *); | 285 | extern int usb_composite_probe(struct usb_composite_driver *driver, |
| 288 | extern void usb_composite_unregister(struct usb_composite_driver *); | 286 | int (*bind)(struct usb_composite_dev *cdev)); |
| 287 | extern void usb_composite_unregister(struct usb_composite_driver *driver); | ||
| 289 | 288 | ||
| 290 | 289 | ||
| 291 | /** | 290 | /** |
| @@ -334,6 +333,9 @@ struct usb_composite_dev { | |||
| 334 | struct list_head configs; | 333 | struct list_head configs; |
| 335 | struct usb_composite_driver *driver; | 334 | struct usb_composite_driver *driver; |
| 336 | u8 next_string_id; | 335 | u8 next_string_id; |
| 336 | u8 manufacturer_override; | ||
| 337 | u8 product_override; | ||
| 338 | u8 serial_override; | ||
| 337 | 339 | ||
| 338 | /* the gadget driver won't enable the data pullup | 340 | /* the gadget driver won't enable the data pullup |
| 339 | * while the deactivation count is nonzero. | 341 | * while the deactivation count is nonzero. |
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index d3ef42d7d2f0..006412ce2303 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h | |||
| @@ -705,11 +705,6 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget) | |||
| 705 | * struct usb_gadget_driver - driver for usb 'slave' devices | 705 | * struct usb_gadget_driver - driver for usb 'slave' devices |
| 706 | * @function: String describing the gadget's function | 706 | * @function: String describing the gadget's function |
| 707 | * @speed: Highest speed the driver handles. | 707 | * @speed: Highest speed the driver handles. |
| 708 | * @bind: Invoked when the driver is bound to a gadget, usually | ||
| 709 | * after registering the driver. | ||
| 710 | * At that point, ep0 is fully initialized, and ep_list holds | ||
| 711 | * the currently-available endpoints. | ||
| 712 | * Called in a context that permits sleeping. | ||
| 713 | * @setup: Invoked for ep0 control requests that aren't handled by | 708 | * @setup: Invoked for ep0 control requests that aren't handled by |
| 714 | * the hardware level driver. Most calls must be handled by | 709 | * the hardware level driver. Most calls must be handled by |
| 715 | * the gadget driver, including descriptor and configuration | 710 | * the gadget driver, including descriptor and configuration |
| @@ -774,7 +769,6 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget) | |||
| 774 | struct usb_gadget_driver { | 769 | struct usb_gadget_driver { |
| 775 | char *function; | 770 | char *function; |
| 776 | enum usb_device_speed speed; | 771 | enum usb_device_speed speed; |
| 777 | int (*bind)(struct usb_gadget *); | ||
| 778 | void (*unbind)(struct usb_gadget *); | 772 | void (*unbind)(struct usb_gadget *); |
| 779 | int (*setup)(struct usb_gadget *, | 773 | int (*setup)(struct usb_gadget *, |
| 780 | const struct usb_ctrlrequest *); | 774 | const struct usb_ctrlrequest *); |
| @@ -798,17 +792,19 @@ struct usb_gadget_driver { | |||
| 798 | */ | 792 | */ |
| 799 | 793 | ||
| 800 | /** | 794 | /** |
| 801 | * usb_gadget_register_driver - register a gadget driver | 795 | * usb_gadget_probe_driver - probe a gadget driver |
| 802 | * @driver:the driver being registered | 796 | * @driver: the driver being registered |
| 797 | * @bind: the driver's bind callback | ||
| 803 | * Context: can sleep | 798 | * Context: can sleep |
| 804 | * | 799 | * |
| 805 | * Call this in your gadget driver's module initialization function, | 800 | * Call this in your gadget driver's module initialization function, |
| 806 | * to tell the underlying usb controller driver about your driver. | 801 | * to tell the underlying usb controller driver about your driver. |
| 807 | * The driver's bind() function will be called to bind it to a | 802 | * The @bind() function will be called to bind it to a gadget before this |
| 808 | * gadget before this registration call returns. It's expected that | 803 | * registration call returns. It's expected that the @bind() function will |
| 809 | * the bind() functions will be in init sections. | 804 | * be in init sections. |
| 810 | */ | 805 | */ |
| 811 | int usb_gadget_register_driver(struct usb_gadget_driver *driver); | 806 | int usb_gadget_probe_driver(struct usb_gadget_driver *driver, |
| 807 | int (*bind)(struct usb_gadget *)); | ||
| 812 | 808 | ||
| 813 | /** | 809 | /** |
| 814 | * usb_gadget_unregister_driver - unregister a gadget driver | 810 | * usb_gadget_unregister_driver - unregister a gadget driver |
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index 3b571f1ffbb3..0b6e751ea0b1 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h | |||
| @@ -329,6 +329,8 @@ extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags); | |||
| 329 | extern int usb_hcd_unlink_urb(struct urb *urb, int status); | 329 | extern int usb_hcd_unlink_urb(struct urb *urb, int status); |
| 330 | extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, | 330 | extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, |
| 331 | int status); | 331 | int status); |
| 332 | extern void unmap_urb_setup_for_dma(struct usb_hcd *, struct urb *); | ||
| 333 | extern void unmap_urb_for_dma(struct usb_hcd *, struct urb *); | ||
| 332 | extern void usb_hcd_flush_endpoint(struct usb_device *udev, | 334 | extern void usb_hcd_flush_endpoint(struct usb_device *udev, |
| 333 | struct usb_host_endpoint *ep); | 335 | struct usb_host_endpoint *ep); |
| 334 | extern void usb_hcd_disable_endpoint(struct usb_device *udev, | 336 | extern void usb_hcd_disable_endpoint(struct usb_device *udev, |
diff --git a/include/linux/usb/intel_mid_otg.h b/include/linux/usb/intel_mid_otg.h new file mode 100644 index 000000000000..a0ccf795f362 --- /dev/null +++ b/include/linux/usb/intel_mid_otg.h | |||
| @@ -0,0 +1,180 @@ | |||
| 1 | /* | ||
| 2 | * Intel MID (Langwell/Penwell) USB OTG Transceiver driver | ||
| 3 | * Copyright (C) 2008 - 2010, Intel Corporation. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms and conditions of the GNU General Public License, | ||
| 7 | * version 2, as published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 12 | * more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along with | ||
| 15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 17 | * | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef __INTEL_MID_OTG_H | ||
| 21 | #define __INTEL_MID_OTG_H | ||
| 22 | |||
| 23 | #include <linux/pm.h> | ||
| 24 | #include <linux/usb/otg.h> | ||
| 25 | #include <linux/notifier.h> | ||
| 26 | |||
| 27 | struct intel_mid_otg_xceiv; | ||
| 28 | |||
| 29 | /* This is a common data structure for Intel MID platform to | ||
| 30 | * save values of the OTG state machine */ | ||
| 31 | struct otg_hsm { | ||
| 32 | /* Input */ | ||
| 33 | int a_bus_resume; | ||
| 34 | int a_bus_suspend; | ||
| 35 | int a_conn; | ||
| 36 | int a_sess_vld; | ||
| 37 | int a_srp_det; | ||
| 38 | int a_vbus_vld; | ||
| 39 | int b_bus_resume; | ||
| 40 | int b_bus_suspend; | ||
| 41 | int b_conn; | ||
| 42 | int b_se0_srp; | ||
| 43 | int b_ssend_srp; | ||
| 44 | int b_sess_end; | ||
| 45 | int b_sess_vld; | ||
| 46 | int id; | ||
| 47 | /* id values */ | ||
| 48 | #define ID_B 0x05 | ||
| 49 | #define ID_A 0x04 | ||
| 50 | #define ID_ACA_C 0x03 | ||
| 51 | #define ID_ACA_B 0x02 | ||
| 52 | #define ID_ACA_A 0x01 | ||
| 53 | int power_up; | ||
| 54 | int adp_change; | ||
| 55 | int test_device; | ||
| 56 | |||
| 57 | /* Internal variables */ | ||
| 58 | int a_set_b_hnp_en; | ||
| 59 | int b_srp_done; | ||
| 60 | int b_hnp_enable; | ||
| 61 | int hnp_poll_enable; | ||
| 62 | |||
| 63 | /* Timeout indicator for timers */ | ||
| 64 | int a_wait_vrise_tmout; | ||
| 65 | int a_wait_bcon_tmout; | ||
| 66 | int a_aidl_bdis_tmout; | ||
| 67 | int a_bidl_adis_tmout; | ||
| 68 | int a_bidl_adis_tmr; | ||
| 69 | int a_wait_vfall_tmout; | ||
| 70 | int b_ase0_brst_tmout; | ||
| 71 | int b_bus_suspend_tmout; | ||
| 72 | int b_srp_init_tmout; | ||
| 73 | int b_srp_fail_tmout; | ||
| 74 | int b_srp_fail_tmr; | ||
| 75 | int b_adp_sense_tmout; | ||
| 76 | |||
| 77 | /* Informative variables */ | ||
| 78 | int a_bus_drop; | ||
| 79 | int a_bus_req; | ||
| 80 | int a_clr_err; | ||
| 81 | int b_bus_req; | ||
| 82 | int a_suspend_req; | ||
| 83 | int b_bus_suspend_vld; | ||
| 84 | |||
| 85 | /* Output */ | ||
| 86 | int drv_vbus; | ||
| 87 | int loc_conn; | ||
| 88 | int loc_sof; | ||
| 89 | |||
| 90 | /* Others */ | ||
| 91 | int vbus_srp_up; | ||
| 92 | }; | ||
| 93 | |||
| 94 | /* must provide ULPI access function to read/write registers implemented in | ||
| 95 | * ULPI address space */ | ||
| 96 | struct iotg_ulpi_access_ops { | ||
| 97 | int (*read)(struct intel_mid_otg_xceiv *iotg, u8 reg, u8 *val); | ||
| 98 | int (*write)(struct intel_mid_otg_xceiv *iotg, u8 reg, u8 val); | ||
| 99 | }; | ||
| 100 | |||
| 101 | #define OTG_A_DEVICE 0x0 | ||
| 102 | #define OTG_B_DEVICE 0x1 | ||
| 103 | |||
| 104 | /* | ||
| 105 | * the Intel MID (Langwell/Penwell) otg transceiver driver needs to interact | ||
| 106 | * with device and host drivers to implement the USB OTG related feature. More | ||
| 107 | * function members are added based on otg_transceiver data structure for this | ||
| 108 | * purpose. | ||
| 109 | */ | ||
| 110 | struct intel_mid_otg_xceiv { | ||
| 111 | struct otg_transceiver otg; | ||
| 112 | struct otg_hsm hsm; | ||
| 113 | |||
| 114 | /* base address */ | ||
| 115 | void __iomem *base; | ||
| 116 | |||
| 117 | /* ops to access ulpi */ | ||
| 118 | struct iotg_ulpi_access_ops ulpi_ops; | ||
| 119 | |||
| 120 | /* atomic notifier for interrupt context */ | ||
| 121 | struct atomic_notifier_head iotg_notifier; | ||
| 122 | |||
| 123 | /* start/stop USB Host function */ | ||
| 124 | int (*start_host)(struct intel_mid_otg_xceiv *iotg); | ||
| 125 | int (*stop_host)(struct intel_mid_otg_xceiv *iotg); | ||
| 126 | |||
| 127 | /* start/stop USB Peripheral function */ | ||
| 128 | int (*start_peripheral)(struct intel_mid_otg_xceiv *iotg); | ||
| 129 | int (*stop_peripheral)(struct intel_mid_otg_xceiv *iotg); | ||
| 130 | |||
| 131 | /* start/stop ADP sense/probe function */ | ||
| 132 | int (*set_adp_probe)(struct intel_mid_otg_xceiv *iotg, | ||
| 133 | bool enabled, int dev); | ||
| 134 | int (*set_adp_sense)(struct intel_mid_otg_xceiv *iotg, | ||
| 135 | bool enabled); | ||
| 136 | |||
| 137 | #ifdef CONFIG_PM | ||
| 138 | /* suspend/resume USB host function */ | ||
| 139 | int (*suspend_host)(struct intel_mid_otg_xceiv *iotg, | ||
| 140 | pm_message_t message); | ||
| 141 | int (*resume_host)(struct intel_mid_otg_xceiv *iotg); | ||
| 142 | |||
| 143 | int (*suspend_peripheral)(struct intel_mid_otg_xceiv *iotg, | ||
| 144 | pm_message_t message); | ||
| 145 | int (*resume_peripheral)(struct intel_mid_otg_xceiv *iotg); | ||
| 146 | #endif | ||
| 147 | |||
| 148 | }; | ||
| 149 | static inline | ||
| 150 | struct intel_mid_otg_xceiv *otg_to_mid_xceiv(struct otg_transceiver *otg) | ||
| 151 | { | ||
| 152 | return container_of(otg, struct intel_mid_otg_xceiv, otg); | ||
| 153 | } | ||
| 154 | |||
| 155 | #define MID_OTG_NOTIFY_CONNECT 0x0001 | ||
| 156 | #define MID_OTG_NOTIFY_DISCONN 0x0002 | ||
| 157 | #define MID_OTG_NOTIFY_HSUSPEND 0x0003 | ||
| 158 | #define MID_OTG_NOTIFY_HRESUME 0x0004 | ||
| 159 | #define MID_OTG_NOTIFY_CSUSPEND 0x0005 | ||
| 160 | #define MID_OTG_NOTIFY_CRESUME 0x0006 | ||
| 161 | #define MID_OTG_NOTIFY_HOSTADD 0x0007 | ||
| 162 | #define MID_OTG_NOTIFY_HOSTREMOVE 0x0008 | ||
| 163 | #define MID_OTG_NOTIFY_CLIENTADD 0x0009 | ||
| 164 | #define MID_OTG_NOTIFY_CLIENTREMOVE 0x000a | ||
| 165 | |||
| 166 | static inline int | ||
| 167 | intel_mid_otg_register_notifier(struct intel_mid_otg_xceiv *iotg, | ||
| 168 | struct notifier_block *nb) | ||
| 169 | { | ||
| 170 | return atomic_notifier_chain_register(&iotg->iotg_notifier, nb); | ||
| 171 | } | ||
| 172 | |||
| 173 | static inline void | ||
| 174 | intel_mid_otg_unregister_notifier(struct intel_mid_otg_xceiv *iotg, | ||
| 175 | struct notifier_block *nb) | ||
| 176 | { | ||
| 177 | atomic_notifier_chain_unregister(&iotg->iotg_notifier, nb); | ||
| 178 | } | ||
| 179 | |||
| 180 | #endif /* __INTEL_MID_OTG_H */ | ||
diff --git a/include/linux/usb/langwell_otg.h b/include/linux/usb/langwell_otg.h new file mode 100644 index 000000000000..51f17b16d312 --- /dev/null +++ b/include/linux/usb/langwell_otg.h | |||
| @@ -0,0 +1,139 @@ | |||
| 1 | /* | ||
| 2 | * Intel Langwell USB OTG transceiver driver | ||
| 3 | * Copyright (C) 2008 - 2010, Intel Corporation. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms and conditions of the GNU General Public License, | ||
| 7 | * version 2, as published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 12 | * more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along with | ||
| 15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 17 | * | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef __LANGWELL_OTG_H | ||
| 21 | #define __LANGWELL_OTG_H | ||
| 22 | |||
| 23 | #include <linux/usb/intel_mid_otg.h> | ||
| 24 | |||
| 25 | #define CI_USBCMD 0x30 | ||
| 26 | # define USBCMD_RST BIT(1) | ||
| 27 | # define USBCMD_RS BIT(0) | ||
| 28 | #define CI_USBSTS 0x34 | ||
| 29 | # define USBSTS_SLI BIT(8) | ||
| 30 | # define USBSTS_URI BIT(6) | ||
| 31 | # define USBSTS_PCI BIT(2) | ||
| 32 | #define CI_PORTSC1 0x74 | ||
| 33 | # define PORTSC_PP BIT(12) | ||
| 34 | # define PORTSC_LS (BIT(11) | BIT(10)) | ||
| 35 | # define PORTSC_SUSP BIT(7) | ||
| 36 | # define PORTSC_CCS BIT(0) | ||
| 37 | #define CI_HOSTPC1 0xb4 | ||
| 38 | # define HOSTPC1_PHCD BIT(22) | ||
| 39 | #define CI_OTGSC 0xf4 | ||
| 40 | # define OTGSC_DPIE BIT(30) | ||
| 41 | # define OTGSC_1MSE BIT(29) | ||
| 42 | # define OTGSC_BSEIE BIT(28) | ||
| 43 | # define OTGSC_BSVIE BIT(27) | ||
| 44 | # define OTGSC_ASVIE BIT(26) | ||
| 45 | # define OTGSC_AVVIE BIT(25) | ||
| 46 | # define OTGSC_IDIE BIT(24) | ||
| 47 | # define OTGSC_DPIS BIT(22) | ||
| 48 | # define OTGSC_1MSS BIT(21) | ||
| 49 | # define OTGSC_BSEIS BIT(20) | ||
| 50 | # define OTGSC_BSVIS BIT(19) | ||
| 51 | # define OTGSC_ASVIS BIT(18) | ||
| 52 | # define OTGSC_AVVIS BIT(17) | ||
| 53 | # define OTGSC_IDIS BIT(16) | ||
| 54 | # define OTGSC_DPS BIT(14) | ||
| 55 | # define OTGSC_1MST BIT(13) | ||
| 56 | # define OTGSC_BSE BIT(12) | ||
| 57 | # define OTGSC_BSV BIT(11) | ||
| 58 | # define OTGSC_ASV BIT(10) | ||
| 59 | # define OTGSC_AVV BIT(9) | ||
| 60 | # define OTGSC_ID BIT(8) | ||
| 61 | # define OTGSC_HABA BIT(7) | ||
| 62 | # define OTGSC_HADP BIT(6) | ||
| 63 | # define OTGSC_IDPU BIT(5) | ||
| 64 | # define OTGSC_DP BIT(4) | ||
| 65 | # define OTGSC_OT BIT(3) | ||
| 66 | # define OTGSC_HAAR BIT(2) | ||
| 67 | # define OTGSC_VC BIT(1) | ||
| 68 | # define OTGSC_VD BIT(0) | ||
| 69 | # define OTGSC_INTEN_MASK (0x7f << 24) | ||
| 70 | # define OTGSC_INT_MASK (0x5f << 24) | ||
| 71 | # define OTGSC_INTSTS_MASK (0x7f << 16) | ||
| 72 | #define CI_USBMODE 0xf8 | ||
| 73 | # define USBMODE_CM (BIT(1) | BIT(0)) | ||
| 74 | # define USBMODE_IDLE 0 | ||
| 75 | # define USBMODE_DEVICE 0x2 | ||
| 76 | # define USBMODE_HOST 0x3 | ||
| 77 | #define USBCFG_ADDR 0xff10801c | ||
| 78 | #define USBCFG_LEN 4 | ||
| 79 | # define USBCFG_VBUSVAL BIT(14) | ||
| 80 | # define USBCFG_AVALID BIT(13) | ||
| 81 | # define USBCFG_BVALID BIT(12) | ||
| 82 | # define USBCFG_SESEND BIT(11) | ||
| 83 | |||
| 84 | #define INTR_DUMMY_MASK (USBSTS_SLI | USBSTS_URI | USBSTS_PCI) | ||
| 85 | |||
| 86 | enum langwell_otg_timer_type { | ||
| 87 | TA_WAIT_VRISE_TMR, | ||
| 88 | TA_WAIT_BCON_TMR, | ||
| 89 | TA_AIDL_BDIS_TMR, | ||
| 90 | TB_ASE0_BRST_TMR, | ||
| 91 | TB_SE0_SRP_TMR, | ||
| 92 | TB_SRP_INIT_TMR, | ||
| 93 | TB_SRP_FAIL_TMR, | ||
| 94 | TB_BUS_SUSPEND_TMR | ||
| 95 | }; | ||
| 96 | |||
| 97 | #define TA_WAIT_VRISE 100 | ||
| 98 | #define TA_WAIT_BCON 30000 | ||
| 99 | #define TA_AIDL_BDIS 15000 | ||
| 100 | #define TB_ASE0_BRST 5000 | ||
| 101 | #define TB_SE0_SRP 2 | ||
| 102 | #define TB_SRP_INIT 100 | ||
| 103 | #define TB_SRP_FAIL 5500 | ||
| 104 | #define TB_BUS_SUSPEND 500 | ||
| 105 | |||
| 106 | struct langwell_otg_timer { | ||
| 107 | unsigned long expires; /* Number of count increase to timeout */ | ||
| 108 | unsigned long count; /* Tick counter */ | ||
| 109 | void (*function)(unsigned long); /* Timeout function */ | ||
| 110 | unsigned long data; /* Data passed to function */ | ||
| 111 | struct list_head list; | ||
| 112 | }; | ||
| 113 | |||
| 114 | struct langwell_otg { | ||
| 115 | struct intel_mid_otg_xceiv iotg; | ||
| 116 | struct device *dev; | ||
| 117 | |||
| 118 | void __iomem *usbcfg; /* SCCBUSB config Reg */ | ||
| 119 | |||
| 120 | unsigned region; | ||
| 121 | unsigned cfg_region; | ||
| 122 | |||
| 123 | struct work_struct work; | ||
| 124 | struct workqueue_struct *qwork; | ||
| 125 | struct timer_list hsm_timer; | ||
| 126 | |||
| 127 | spinlock_t lock; | ||
| 128 | spinlock_t wq_lock; | ||
| 129 | |||
| 130 | struct notifier_block iotg_notifier; | ||
| 131 | }; | ||
| 132 | |||
| 133 | static inline | ||
| 134 | struct langwell_otg *mid_xceiv_to_lnw(struct intel_mid_otg_xceiv *iotg) | ||
| 135 | { | ||
| 136 | return container_of(iotg, struct langwell_otg, iotg); | ||
| 137 | } | ||
| 138 | |||
| 139 | #endif /* __LANGWELL_OTG_H__ */ | ||
diff --git a/include/linux/usb/ncm.h b/include/linux/usb/ncm.h deleted file mode 100644 index 006d1064c8b2..000000000000 --- a/include/linux/usb/ncm.h +++ /dev/null | |||
| @@ -1,114 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * USB CDC NCM auxiliary definitions | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef __LINUX_USB_NCM_H | ||
| 6 | #define __LINUX_USB_NCM_H | ||
| 7 | |||
| 8 | #include <linux/types.h> | ||
| 9 | #include <linux/usb/cdc.h> | ||
| 10 | #include <asm/unaligned.h> | ||
| 11 | |||
| 12 | #define NCM_NTB_MIN_IN_SIZE 2048 | ||
| 13 | #define NCM_NTB_MIN_OUT_SIZE 2048 | ||
| 14 | |||
| 15 | #define NCM_CONTROL_TIMEOUT (5 * 1000) | ||
| 16 | |||
| 17 | /* bmNetworkCapabilities */ | ||
| 18 | |||
| 19 | #define NCM_NCAP_ETH_FILTER (1 << 0) | ||
| 20 | #define NCM_NCAP_NET_ADDRESS (1 << 1) | ||
| 21 | #define NCM_NCAP_ENCAP_COMM (1 << 2) | ||
| 22 | #define NCM_NCAP_MAX_DGRAM (1 << 3) | ||
| 23 | #define NCM_NCAP_CRC_MODE (1 << 4) | ||
| 24 | |||
| 25 | /* | ||
| 26 | * Here are options for NCM Datagram Pointer table (NDP) parser. | ||
| 27 | * There are 2 different formats: NDP16 and NDP32 in the spec (ch. 3), | ||
| 28 | * in NDP16 offsets and sizes fields are 1 16bit word wide, | ||
| 29 | * in NDP32 -- 2 16bit words wide. Also signatures are different. | ||
| 30 | * To make the parser code the same, put the differences in the structure, | ||
| 31 | * and switch pointers to the structures when the format is changed. | ||
| 32 | */ | ||
| 33 | |||
| 34 | struct ndp_parser_opts { | ||
| 35 | u32 nth_sign; | ||
| 36 | u32 ndp_sign; | ||
| 37 | unsigned nth_size; | ||
| 38 | unsigned ndp_size; | ||
| 39 | unsigned ndplen_align; | ||
| 40 | /* sizes in u16 units */ | ||
| 41 | unsigned dgram_item_len; /* index or length */ | ||
| 42 | unsigned block_length; | ||
| 43 | unsigned fp_index; | ||
| 44 | unsigned reserved1; | ||
| 45 | unsigned reserved2; | ||
| 46 | unsigned next_fp_index; | ||
| 47 | }; | ||
| 48 | |||
| 49 | #define INIT_NDP16_OPTS { \ | ||
| 50 | .nth_sign = NCM_NTH16_SIGN, \ | ||
| 51 | .ndp_sign = NCM_NDP16_NOCRC_SIGN, \ | ||
| 52 | .nth_size = sizeof(struct usb_cdc_ncm_nth16), \ | ||
| 53 | .ndp_size = sizeof(struct usb_cdc_ncm_ndp16), \ | ||
| 54 | .ndplen_align = 4, \ | ||
| 55 | .dgram_item_len = 1, \ | ||
| 56 | .block_length = 1, \ | ||
| 57 | .fp_index = 1, \ | ||
| 58 | .reserved1 = 0, \ | ||
| 59 | .reserved2 = 0, \ | ||
| 60 | .next_fp_index = 1, \ | ||
| 61 | } | ||
| 62 | |||
| 63 | |||
| 64 | #define INIT_NDP32_OPTS { \ | ||
| 65 | .nth_sign = NCM_NTH32_SIGN, \ | ||
| 66 | .ndp_sign = NCM_NDP32_NOCRC_SIGN, \ | ||
| 67 | .nth_size = sizeof(struct usb_cdc_ncm_nth32), \ | ||
| 68 | .ndp_size = sizeof(struct usb_cdc_ncm_ndp32), \ | ||
| 69 | .ndplen_align = 8, \ | ||
| 70 | .dgram_item_len = 2, \ | ||
| 71 | .block_length = 2, \ | ||
| 72 | .fp_index = 2, \ | ||
| 73 | .reserved1 = 1, \ | ||
| 74 | .reserved2 = 2, \ | ||
| 75 | .next_fp_index = 2, \ | ||
| 76 | } | ||
| 77 | |||
| 78 | static inline void put_ncm(__le16 **p, unsigned size, unsigned val) | ||
| 79 | { | ||
| 80 | switch (size) { | ||
| 81 | case 1: | ||
| 82 | put_unaligned_le16((u16)val, *p); | ||
| 83 | break; | ||
| 84 | case 2: | ||
| 85 | put_unaligned_le32((u32)val, *p); | ||
| 86 | |||
| 87 | break; | ||
| 88 | default: | ||
| 89 | BUG(); | ||
| 90 | } | ||
| 91 | |||
| 92 | *p += size; | ||
| 93 | } | ||
| 94 | |||
| 95 | static inline unsigned get_ncm(__le16 **p, unsigned size) | ||
| 96 | { | ||
| 97 | unsigned tmp; | ||
| 98 | |||
| 99 | switch (size) { | ||
| 100 | case 1: | ||
| 101 | tmp = get_unaligned_le16(*p); | ||
| 102 | break; | ||
| 103 | case 2: | ||
| 104 | tmp = get_unaligned_le32(*p); | ||
| 105 | break; | ||
| 106 | default: | ||
| 107 | BUG(); | ||
| 108 | } | ||
| 109 | |||
| 110 | *p += size; | ||
| 111 | return tmp; | ||
| 112 | } | ||
| 113 | |||
| 114 | #endif /* __LINUX_USB_NCM_H */ | ||
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h index 545cba73ccaf..0a5b3711e502 100644 --- a/include/linux/usb/otg.h +++ b/include/linux/usb/otg.h | |||
| @@ -164,8 +164,19 @@ otg_shutdown(struct otg_transceiver *otg) | |||
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | /* for usb host and peripheral controller drivers */ | 166 | /* for usb host and peripheral controller drivers */ |
| 167 | #ifdef CONFIG_USB_OTG_UTILS | ||
| 167 | extern struct otg_transceiver *otg_get_transceiver(void); | 168 | extern struct otg_transceiver *otg_get_transceiver(void); |
| 168 | extern void otg_put_transceiver(struct otg_transceiver *); | 169 | extern void otg_put_transceiver(struct otg_transceiver *); |
| 170 | #else | ||
| 171 | static inline struct otg_transceiver *otg_get_transceiver(void) | ||
| 172 | { | ||
| 173 | return NULL; | ||
| 174 | } | ||
| 175 | |||
| 176 | static inline void otg_put_transceiver(struct otg_transceiver *x) | ||
| 177 | { | ||
| 178 | } | ||
| 179 | #endif | ||
| 169 | 180 | ||
| 170 | /* Context: can sleep */ | 181 | /* Context: can sleep */ |
| 171 | static inline int | 182 | static inline int |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 55675b1efb28..16d682f4f7c3 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
| @@ -271,6 +271,8 @@ struct usb_serial_driver { | |||
| 271 | int (*tiocmget)(struct tty_struct *tty, struct file *file); | 271 | int (*tiocmget)(struct tty_struct *tty, struct file *file); |
| 272 | int (*tiocmset)(struct tty_struct *tty, struct file *file, | 272 | int (*tiocmset)(struct tty_struct *tty, struct file *file, |
| 273 | unsigned int set, unsigned int clear); | 273 | unsigned int set, unsigned int clear); |
| 274 | int (*get_icount)(struct tty_struct *tty, | ||
| 275 | struct serial_icounter_struct *icount); | ||
| 274 | /* Called by the tty layer for port level work. There may or may not | 276 | /* Called by the tty layer for port level work. There may or may not |
| 275 | be an attached tty at this point */ | 277 | be an attached tty at this point */ |
| 276 | void (*dtr_rts)(struct usb_serial_port *port, int on); | 278 | void (*dtr_rts)(struct usb_serial_port *port, int on); |
diff --git a/include/linux/usb/storage.h b/include/linux/usb/storage.h new file mode 100644 index 000000000000..d7fc910f1dc4 --- /dev/null +++ b/include/linux/usb/storage.h | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | #ifndef __LINUX_USB_STORAGE_H | ||
| 2 | #define __LINUX_USB_STORAGE_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * linux/usb/storage.h | ||
| 6 | * | ||
| 7 | * Copyright Matthew Wilcox for Intel Corp, 2010 | ||
| 8 | * | ||
| 9 | * This file contains definitions taken from the | ||
| 10 | * USB Mass Storage Class Specification Overview | ||
| 11 | * | ||
| 12 | * Distributed under the terms of the GNU GPL, version two. | ||
| 13 | */ | ||
| 14 | |||
| 15 | /* Storage subclass codes */ | ||
| 16 | |||
| 17 | #define USB_SC_RBC 0x01 /* Typically, flash devices */ | ||
| 18 | #define USB_SC_8020 0x02 /* CD-ROM */ | ||
| 19 | #define USB_SC_QIC 0x03 /* QIC-157 Tapes */ | ||
| 20 | #define USB_SC_UFI 0x04 /* Floppy */ | ||
| 21 | #define USB_SC_8070 0x05 /* Removable media */ | ||
| 22 | #define USB_SC_SCSI 0x06 /* Transparent */ | ||
| 23 | #define USB_SC_LOCKABLE 0x07 /* Password-protected */ | ||
| 24 | |||
| 25 | #define USB_SC_ISD200 0xf0 /* ISD200 ATA */ | ||
| 26 | #define USB_SC_CYP_ATACB 0xf1 /* Cypress ATACB */ | ||
| 27 | #define USB_SC_DEVICE 0xff /* Use device's value */ | ||
| 28 | |||
| 29 | /* Storage protocol codes */ | ||
| 30 | |||
| 31 | #define USB_PR_CBI 0x00 /* Control/Bulk/Interrupt */ | ||
| 32 | #define USB_PR_CB 0x01 /* Control/Bulk w/o interrupt */ | ||
| 33 | #define USB_PR_BULK 0x50 /* bulk only */ | ||
| 34 | #define USB_PR_UAS 0x62 /* USB Attached SCSI */ | ||
| 35 | |||
| 36 | #define USB_PR_USBAT 0x80 /* SCM-ATAPI bridge */ | ||
| 37 | #define USB_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */ | ||
| 38 | #define USB_PR_SDDR55 0x82 /* SDDR-55 (made up) */ | ||
| 39 | #define USB_PR_DPCM_USB 0xf0 /* Combination CB/SDDR09 */ | ||
| 40 | #define USB_PR_FREECOM 0xf1 /* Freecom */ | ||
| 41 | #define USB_PR_DATAFAB 0xf2 /* Datafab chipsets */ | ||
| 42 | #define USB_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */ | ||
| 43 | #define USB_PR_ALAUDA 0xf4 /* Alauda chipsets */ | ||
| 44 | #define USB_PR_KARMA 0xf5 /* Rio Karma */ | ||
| 45 | |||
| 46 | #define USB_PR_DEVICE 0xff /* Use device's value */ | ||
| 47 | |||
| 48 | #endif | ||
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index a4b947e470a5..71693d4a4fe1 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
| @@ -58,7 +58,11 @@ | |||
| 58 | US_FLAG(CAPACITY_OK, 0x00010000) \ | 58 | US_FLAG(CAPACITY_OK, 0x00010000) \ |
| 59 | /* READ CAPACITY response is correct */ \ | 59 | /* READ CAPACITY response is correct */ \ |
| 60 | US_FLAG(BAD_SENSE, 0x00020000) \ | 60 | US_FLAG(BAD_SENSE, 0x00020000) \ |
| 61 | /* Bad Sense (never more than 18 bytes) */ | 61 | /* Bad Sense (never more than 18 bytes) */ \ |
| 62 | US_FLAG(NO_READ_DISC_INFO, 0x00040000) \ | ||
| 63 | /* cannot handle READ_DISC_INFO */ \ | ||
| 64 | US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \ | ||
| 65 | /* cannot handle READ_CAPACITY_16 */ | ||
| 62 | 66 | ||
| 63 | #define US_FLAG(name, value) US_FL_##name = value , | 67 | #define US_FLAG(name, value) US_FL_##name = value , |
| 64 | enum { US_DO_ALL_FLAGS }; | 68 | enum { US_DO_ALL_FLAGS }; |
| @@ -74,42 +78,7 @@ enum { US_DO_ALL_FLAGS }; | |||
| 74 | #define USB_US_TYPE(flags) (((flags) >> 24) & 0xFF) | 78 | #define USB_US_TYPE(flags) (((flags) >> 24) & 0xFF) |
| 75 | #define USB_US_ORIG_FLAGS(flags) ((flags) & 0x00FFFFFF) | 79 | #define USB_US_ORIG_FLAGS(flags) ((flags) & 0x00FFFFFF) |
| 76 | 80 | ||
| 77 | /* | 81 | #include <linux/usb/storage.h> |
| 78 | * This is probably not the best place to keep these constants, conceptually. | ||
| 79 | * But it's the only header included into all places which need them. | ||
| 80 | */ | ||
| 81 | |||
| 82 | /* Sub Classes */ | ||
| 83 | |||
| 84 | #define US_SC_RBC 0x01 /* Typically, flash devices */ | ||
| 85 | #define US_SC_8020 0x02 /* CD-ROM */ | ||
| 86 | #define US_SC_QIC 0x03 /* QIC-157 Tapes */ | ||
| 87 | #define US_SC_UFI 0x04 /* Floppy */ | ||
| 88 | #define US_SC_8070 0x05 /* Removable media */ | ||
| 89 | #define US_SC_SCSI 0x06 /* Transparent */ | ||
| 90 | #define US_SC_LOCKABLE 0x07 /* Password-protected */ | ||
| 91 | |||
| 92 | #define US_SC_ISD200 0xf0 /* ISD200 ATA */ | ||
| 93 | #define US_SC_CYP_ATACB 0xf1 /* Cypress ATACB */ | ||
| 94 | #define US_SC_DEVICE 0xff /* Use device's value */ | ||
| 95 | |||
| 96 | /* Protocols */ | ||
| 97 | |||
| 98 | #define US_PR_CBI 0x00 /* Control/Bulk/Interrupt */ | ||
| 99 | #define US_PR_CB 0x01 /* Control/Bulk w/o interrupt */ | ||
| 100 | #define US_PR_BULK 0x50 /* bulk only */ | ||
| 101 | |||
| 102 | #define US_PR_USBAT 0x80 /* SCM-ATAPI bridge */ | ||
| 103 | #define US_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */ | ||
| 104 | #define US_PR_SDDR55 0x82 /* SDDR-55 (made up) */ | ||
| 105 | #define US_PR_DPCM_USB 0xf0 /* Combination CB/SDDR09 */ | ||
| 106 | #define US_PR_FREECOM 0xf1 /* Freecom */ | ||
| 107 | #define US_PR_DATAFAB 0xf2 /* Datafab chipsets */ | ||
| 108 | #define US_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */ | ||
| 109 | #define US_PR_ALAUDA 0xf4 /* Alauda chipsets */ | ||
| 110 | #define US_PR_KARMA 0xf5 /* Rio Karma */ | ||
| 111 | |||
| 112 | #define US_PR_DEVICE 0xff /* Use device's value */ | ||
| 113 | 82 | ||
| 114 | /* | 83 | /* |
| 115 | */ | 84 | */ |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 01c2145118dc..63a4fe6d51bd 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
| @@ -117,10 +117,12 @@ extern rwlock_t vmlist_lock; | |||
| 117 | extern struct vm_struct *vmlist; | 117 | extern struct vm_struct *vmlist; |
| 118 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); | 118 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); |
| 119 | 119 | ||
| 120 | #ifdef CONFIG_SMP | ||
| 120 | struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, | 121 | struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, |
| 121 | const size_t *sizes, int nr_vms, | 122 | const size_t *sizes, int nr_vms, |
| 122 | size_t align, gfp_t gfp_mask); | 123 | size_t align, gfp_t gfp_mask); |
| 123 | 124 | ||
| 124 | void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); | 125 | void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); |
| 126 | #endif | ||
| 125 | 127 | ||
| 126 | #endif /* _LINUX_VMALLOC_H */ | 128 | #endif /* _LINUX_VMALLOC_H */ |
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 25e02c941bac..070bb7a88936 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
| @@ -243,11 +243,12 @@ enum { | |||
| 243 | WQ_NON_REENTRANT = 1 << 0, /* guarantee non-reentrance */ | 243 | WQ_NON_REENTRANT = 1 << 0, /* guarantee non-reentrance */ |
| 244 | WQ_UNBOUND = 1 << 1, /* not bound to any cpu */ | 244 | WQ_UNBOUND = 1 << 1, /* not bound to any cpu */ |
| 245 | WQ_FREEZEABLE = 1 << 2, /* freeze during suspend */ | 245 | WQ_FREEZEABLE = 1 << 2, /* freeze during suspend */ |
| 246 | WQ_RESCUER = 1 << 3, /* has an rescue worker */ | 246 | WQ_MEM_RECLAIM = 1 << 3, /* may be used for memory reclaim */ |
| 247 | WQ_HIGHPRI = 1 << 4, /* high priority */ | 247 | WQ_HIGHPRI = 1 << 4, /* high priority */ |
| 248 | WQ_CPU_INTENSIVE = 1 << 5, /* cpu instensive workqueue */ | 248 | WQ_CPU_INTENSIVE = 1 << 5, /* cpu instensive workqueue */ |
| 249 | 249 | ||
| 250 | WQ_DYING = 1 << 6, /* internal: workqueue is dying */ | 250 | WQ_DYING = 1 << 6, /* internal: workqueue is dying */ |
| 251 | WQ_RESCUER = 1 << 7, /* internal: workqueue has rescuer */ | ||
| 251 | 252 | ||
| 252 | WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */ | 253 | WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */ |
| 253 | WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */ | 254 | WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */ |
| @@ -306,12 +307,30 @@ __alloc_workqueue_key(const char *name, unsigned int flags, int max_active, | |||
| 306 | __alloc_workqueue_key((name), (flags), (max_active), NULL, NULL) | 307 | __alloc_workqueue_key((name), (flags), (max_active), NULL, NULL) |
| 307 | #endif | 308 | #endif |
| 308 | 309 | ||
| 310 | /** | ||
| 311 | * alloc_ordered_workqueue - allocate an ordered workqueue | ||
| 312 | * @name: name of the workqueue | ||
| 313 | * @flags: WQ_* flags (only WQ_FREEZEABLE and WQ_MEM_RECLAIM are meaningful) | ||
| 314 | * | ||
| 315 | * Allocate an ordered workqueue. An ordered workqueue executes at | ||
| 316 | * most one work item at any given time in the queued order. They are | ||
| 317 | * implemented as unbound workqueues with @max_active of one. | ||
| 318 | * | ||
| 319 | * RETURNS: | ||
| 320 | * Pointer to the allocated workqueue on success, %NULL on failure. | ||
| 321 | */ | ||
| 322 | static inline struct workqueue_struct * | ||
| 323 | alloc_ordered_workqueue(const char *name, unsigned int flags) | ||
| 324 | { | ||
| 325 | return alloc_workqueue(name, WQ_UNBOUND | flags, 1); | ||
| 326 | } | ||
| 327 | |||
| 309 | #define create_workqueue(name) \ | 328 | #define create_workqueue(name) \ |
| 310 | alloc_workqueue((name), WQ_RESCUER, 1) | 329 | alloc_workqueue((name), WQ_MEM_RECLAIM, 1) |
| 311 | #define create_freezeable_workqueue(name) \ | 330 | #define create_freezeable_workqueue(name) \ |
| 312 | alloc_workqueue((name), WQ_FREEZEABLE | WQ_UNBOUND | WQ_RESCUER, 1) | 331 | alloc_workqueue((name), WQ_FREEZEABLE | WQ_UNBOUND | WQ_MEM_RECLAIM, 1) |
| 313 | #define create_singlethread_workqueue(name) \ | 332 | #define create_singlethread_workqueue(name) \ |
| 314 | alloc_workqueue((name), WQ_UNBOUND | WQ_RESCUER, 1) | 333 | alloc_workqueue((name), WQ_UNBOUND | WQ_MEM_RECLAIM, 1) |
| 315 | 334 | ||
| 316 | extern void destroy_workqueue(struct workqueue_struct *wq); | 335 | extern void destroy_workqueue(struct workqueue_struct *wq); |
| 317 | 336 | ||
| @@ -325,7 +344,6 @@ extern int queue_delayed_work_on(int cpu, struct workqueue_struct *wq, | |||
| 325 | 344 | ||
| 326 | extern void flush_workqueue(struct workqueue_struct *wq); | 345 | extern void flush_workqueue(struct workqueue_struct *wq); |
| 327 | extern void flush_scheduled_work(void); | 346 | extern void flush_scheduled_work(void); |
| 328 | extern void flush_delayed_work(struct delayed_work *work); | ||
| 329 | 347 | ||
| 330 | extern int schedule_work(struct work_struct *work); | 348 | extern int schedule_work(struct work_struct *work); |
| 331 | extern int schedule_work_on(int cpu, struct work_struct *work); | 349 | extern int schedule_work_on(int cpu, struct work_struct *work); |
| @@ -337,8 +355,13 @@ extern int keventd_up(void); | |||
| 337 | 355 | ||
| 338 | int execute_in_process_context(work_func_t fn, struct execute_work *); | 356 | int execute_in_process_context(work_func_t fn, struct execute_work *); |
| 339 | 357 | ||
| 340 | extern int flush_work(struct work_struct *work); | 358 | extern bool flush_work(struct work_struct *work); |
| 341 | extern int cancel_work_sync(struct work_struct *work); | 359 | extern bool flush_work_sync(struct work_struct *work); |
| 360 | extern bool cancel_work_sync(struct work_struct *work); | ||
| 361 | |||
| 362 | extern bool flush_delayed_work(struct delayed_work *dwork); | ||
| 363 | extern bool flush_delayed_work_sync(struct delayed_work *work); | ||
| 364 | extern bool cancel_delayed_work_sync(struct delayed_work *dwork); | ||
| 342 | 365 | ||
| 343 | extern void workqueue_set_max_active(struct workqueue_struct *wq, | 366 | extern void workqueue_set_max_active(struct workqueue_struct *wq, |
| 344 | int max_active); | 367 | int max_active); |
| @@ -352,9 +375,9 @@ extern unsigned int work_busy(struct work_struct *work); | |||
| 352 | * it returns 1 and the work doesn't re-arm itself. Run flush_workqueue() or | 375 | * it returns 1 and the work doesn't re-arm itself. Run flush_workqueue() or |
| 353 | * cancel_work_sync() to wait on it. | 376 | * cancel_work_sync() to wait on it. |
| 354 | */ | 377 | */ |
| 355 | static inline int cancel_delayed_work(struct delayed_work *work) | 378 | static inline bool cancel_delayed_work(struct delayed_work *work) |
| 356 | { | 379 | { |
| 357 | int ret; | 380 | bool ret; |
| 358 | 381 | ||
| 359 | ret = del_timer_sync(&work->timer); | 382 | ret = del_timer_sync(&work->timer); |
| 360 | if (ret) | 383 | if (ret) |
| @@ -367,9 +390,9 @@ static inline int cancel_delayed_work(struct delayed_work *work) | |||
| 367 | * if it returns 0 the timer function may be running and the queueing is in | 390 | * if it returns 0 the timer function may be running and the queueing is in |
| 368 | * progress. | 391 | * progress. |
| 369 | */ | 392 | */ |
| 370 | static inline int __cancel_delayed_work(struct delayed_work *work) | 393 | static inline bool __cancel_delayed_work(struct delayed_work *work) |
| 371 | { | 394 | { |
| 372 | int ret; | 395 | bool ret; |
| 373 | 396 | ||
| 374 | ret = del_timer(&work->timer); | 397 | ret = del_timer(&work->timer); |
| 375 | if (ret) | 398 | if (ret) |
| @@ -377,8 +400,6 @@ static inline int __cancel_delayed_work(struct delayed_work *work) | |||
| 377 | return ret; | 400 | return ret; |
| 378 | } | 401 | } |
| 379 | 402 | ||
| 380 | extern int cancel_delayed_work_sync(struct delayed_work *work); | ||
| 381 | |||
| 382 | /* Obsolete. use cancel_delayed_work_sync() */ | 403 | /* Obsolete. use cancel_delayed_work_sync() */ |
| 383 | static inline | 404 | static inline |
| 384 | void cancel_rearming_delayed_workqueue(struct workqueue_struct *wq, | 405 | void cancel_rearming_delayed_workqueue(struct workqueue_struct *wq, |
| @@ -409,8 +430,4 @@ extern bool freeze_workqueues_busy(void); | |||
| 409 | extern void thaw_workqueues(void); | 430 | extern void thaw_workqueues(void); |
| 410 | #endif /* CONFIG_FREEZER */ | 431 | #endif /* CONFIG_FREEZER */ |
| 411 | 432 | ||
| 412 | #ifdef CONFIG_LOCKDEP | ||
| 413 | int in_workqueue_context(struct workqueue_struct *wq); | ||
| 414 | #endif | ||
| 415 | |||
| 416 | #endif | 433 | #endif |
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index d06e13be717b..3dec1949f69c 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h | |||
| @@ -205,6 +205,7 @@ struct domain_device { | |||
| 205 | }; | 205 | }; |
| 206 | 206 | ||
| 207 | void *lldd_dev; | 207 | void *lldd_dev; |
| 208 | int gone; | ||
| 208 | }; | 209 | }; |
| 209 | 210 | ||
| 210 | struct sas_discovery_event { | 211 | struct sas_discovery_event { |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 8fcb6e0e9e72..216af8538cc9 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
| @@ -32,6 +32,12 @@ struct scsi_cmnd; | |||
| 32 | #endif | 32 | #endif |
| 33 | 33 | ||
| 34 | /* | 34 | /* |
| 35 | * DIX-capable adapters effectively support infinite chaining for the | ||
| 36 | * protection information scatterlist | ||
| 37 | */ | ||
| 38 | #define SCSI_MAX_PROT_SG_SEGMENTS 0xFFFF | ||
| 39 | |||
| 40 | /* | ||
| 35 | * Special value for scanning to specify scanning or rescanning of all | 41 | * Special value for scanning to specify scanning or rescanning of all |
| 36 | * possible channels, (target) ids, or luns on a given shost. | 42 | * possible channels, (target) ids, or luns on a given shost. |
| 37 | */ | 43 | */ |
| @@ -67,6 +73,7 @@ struct scsi_cmnd; | |||
| 67 | #define SEND_DIAGNOSTIC 0x1d | 73 | #define SEND_DIAGNOSTIC 0x1d |
| 68 | #define ALLOW_MEDIUM_REMOVAL 0x1e | 74 | #define ALLOW_MEDIUM_REMOVAL 0x1e |
| 69 | 75 | ||
| 76 | #define READ_FORMAT_CAPACITIES 0x23 | ||
| 70 | #define SET_WINDOW 0x24 | 77 | #define SET_WINDOW 0x24 |
| 71 | #define READ_CAPACITY 0x25 | 78 | #define READ_CAPACITY 0x25 |
| 72 | #define READ_10 0x28 | 79 | #define READ_10 0x28 |
| @@ -96,6 +103,7 @@ struct scsi_cmnd; | |||
| 96 | #define WRITE_SAME 0x41 | 103 | #define WRITE_SAME 0x41 |
| 97 | #define UNMAP 0x42 | 104 | #define UNMAP 0x42 |
| 98 | #define READ_TOC 0x43 | 105 | #define READ_TOC 0x43 |
| 106 | #define READ_HEADER 0x44 | ||
| 99 | #define LOG_SELECT 0x4c | 107 | #define LOG_SELECT 0x4c |
| 100 | #define LOG_SENSE 0x4d | 108 | #define LOG_SENSE 0x4d |
| 101 | #define XDWRITEREAD_10 0x53 | 109 | #define XDWRITEREAD_10 0x53 |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 50cb34ffef11..85867dcde335 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -148,6 +148,8 @@ struct scsi_device { | |||
| 148 | unsigned retry_hwerror:1; /* Retry HARDWARE_ERROR */ | 148 | unsigned retry_hwerror:1; /* Retry HARDWARE_ERROR */ |
| 149 | unsigned last_sector_bug:1; /* do not use multisector accesses on | 149 | unsigned last_sector_bug:1; /* do not use multisector accesses on |
| 150 | SD_LAST_BUGGY_SECTORS */ | 150 | SD_LAST_BUGGY_SECTORS */ |
| 151 | unsigned no_read_disc_info:1; /* Avoid READ_DISC_INFO cmds */ | ||
| 152 | unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */ | ||
| 151 | unsigned is_visible:1; /* is the device visible in sysfs */ | 153 | unsigned is_visible:1; /* is the device visible in sysfs */ |
| 152 | 154 | ||
| 153 | DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ | 155 | DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index b7bdecb7b76e..d0a6a845f204 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
| @@ -388,6 +388,7 @@ struct scsi_host_template { | |||
| 388 | * of scatter-gather. | 388 | * of scatter-gather. |
| 389 | */ | 389 | */ |
| 390 | unsigned short sg_tablesize; | 390 | unsigned short sg_tablesize; |
| 391 | unsigned short sg_prot_tablesize; | ||
| 391 | 392 | ||
| 392 | /* | 393 | /* |
| 393 | * Set this if the host adapter has limitations beside segment count. | 394 | * Set this if the host adapter has limitations beside segment count. |
| @@ -599,6 +600,7 @@ struct Scsi_Host { | |||
| 599 | int can_queue; | 600 | int can_queue; |
| 600 | short cmd_per_lun; | 601 | short cmd_per_lun; |
| 601 | short unsigned int sg_tablesize; | 602 | short unsigned int sg_tablesize; |
| 603 | short unsigned int sg_prot_tablesize; | ||
| 602 | short unsigned int max_sectors; | 604 | short unsigned int max_sectors; |
| 603 | unsigned long dma_boundary; | 605 | unsigned long dma_boundary; |
| 604 | /* | 606 | /* |
| @@ -823,6 +825,11 @@ static inline unsigned int scsi_host_get_prot(struct Scsi_Host *shost) | |||
| 823 | return shost->prot_capabilities; | 825 | return shost->prot_capabilities; |
| 824 | } | 826 | } |
| 825 | 827 | ||
| 828 | static inline int scsi_host_prot_dma(struct Scsi_Host *shost) | ||
| 829 | { | ||
| 830 | return shost->prot_capabilities >= SHOST_DIX_TYPE0_PROTECTION; | ||
| 831 | } | ||
| 832 | |||
| 826 | static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsigned int target_type) | 833 | static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsigned int target_type) |
| 827 | { | 834 | { |
| 828 | static unsigned char cap[] = { 0, | 835 | static unsigned char cap[] = { 0, |
diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h index 17231385cb37..d6e7994aa634 100644 --- a/include/scsi/scsi_tcq.h +++ b/include/scsi/scsi_tcq.h | |||
| @@ -97,13 +97,9 @@ static inline void scsi_deactivate_tcq(struct scsi_device *sdev, int depth) | |||
| 97 | static inline int scsi_populate_tag_msg(struct scsi_cmnd *cmd, char *msg) | 97 | static inline int scsi_populate_tag_msg(struct scsi_cmnd *cmd, char *msg) |
| 98 | { | 98 | { |
| 99 | struct request *req = cmd->request; | 99 | struct request *req = cmd->request; |
| 100 | struct scsi_device *sdev = cmd->device; | ||
| 101 | 100 | ||
| 102 | if (blk_rq_tagged(req)) { | 101 | if (blk_rq_tagged(req)) { |
| 103 | if (sdev->ordered_tags && req->cmd_flags & REQ_HARDBARRIER) | 102 | *msg++ = MSG_SIMPLE_TAG; |
| 104 | *msg++ = MSG_ORDERED_TAG; | ||
| 105 | else | ||
| 106 | *msg++ = MSG_SIMPLE_TAG; | ||
| 107 | *msg++ = req->tag; | 103 | *msg++ = req->tag; |
| 108 | return 2; | 104 | return 2; |
| 109 | } | 105 | } |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 87d81b3ce564..59816fe31e68 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
| @@ -496,6 +496,7 @@ struct fc_host_attrs { | |||
| 496 | u64 fabric_name; | 496 | u64 fabric_name; |
| 497 | char symbolic_name[FC_SYMBOLIC_NAME_SIZE]; | 497 | char symbolic_name[FC_SYMBOLIC_NAME_SIZE]; |
| 498 | char system_hostname[FC_SYMBOLIC_NAME_SIZE]; | 498 | char system_hostname[FC_SYMBOLIC_NAME_SIZE]; |
| 499 | u32 dev_loss_tmo; | ||
| 499 | 500 | ||
| 500 | /* Private (Transport-managed) Attributes */ | 501 | /* Private (Transport-managed) Attributes */ |
| 501 | enum fc_tgtid_binding_type tgtid_bind_type; | 502 | enum fc_tgtid_binding_type tgtid_bind_type; |
| @@ -580,6 +581,8 @@ struct fc_host_attrs { | |||
| 580 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q_name) | 581 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q_name) |
| 581 | #define fc_host_devloss_work_q(x) \ | 582 | #define fc_host_devloss_work_q(x) \ |
| 582 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q) | 583 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q) |
| 584 | #define fc_host_dev_loss_tmo(x) \ | ||
| 585 | (((struct fc_host_attrs *)(x)->shost_data)->dev_loss_tmo) | ||
| 583 | 586 | ||
| 584 | 587 | ||
| 585 | struct fc_bsg_buffer { | 588 | struct fc_bsg_buffer { |
diff --git a/include/sound/core.h b/include/sound/core.h index 89e0ac17f44a..df26ebbfa9c6 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
| @@ -133,9 +133,7 @@ struct snd_card { | |||
| 133 | int free_on_last_close; /* free in context of file_release */ | 133 | int free_on_last_close; /* free in context of file_release */ |
| 134 | wait_queue_head_t shutdown_sleep; | 134 | wait_queue_head_t shutdown_sleep; |
| 135 | struct device *dev; /* device assigned to this card */ | 135 | struct device *dev; /* device assigned to this card */ |
| 136 | #ifndef CONFIG_SYSFS_DEPRECATED | ||
| 137 | struct device *card_dev; /* cardX object for sysfs */ | 136 | struct device *card_dev; /* cardX object for sysfs */ |
| 138 | #endif | ||
| 139 | 137 | ||
| 140 | #ifdef CONFIG_PM | 138 | #ifdef CONFIG_PM |
| 141 | unsigned int power_state; /* power state */ | 139 | unsigned int power_state; /* power state */ |
| @@ -196,11 +194,7 @@ struct snd_minor { | |||
| 196 | /* return a device pointer linked to each sound device as a parent */ | 194 | /* return a device pointer linked to each sound device as a parent */ |
| 197 | static inline struct device *snd_card_get_device_link(struct snd_card *card) | 195 | static inline struct device *snd_card_get_device_link(struct snd_card *card) |
| 198 | { | 196 | { |
| 199 | #ifdef CONFIG_SYSFS_DEPRECATED | ||
| 200 | return card ? card->dev : NULL; | ||
| 201 | #else | ||
| 202 | return card ? card->card_dev : NULL; | 197 | return card ? card->card_dev : NULL; |
| 203 | #endif | ||
| 204 | } | 198 | } |
| 205 | 199 | ||
| 206 | /* sound.c */ | 200 | /* sound.c */ |
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h index 49682d7e9d60..7d497291c85d 100644 --- a/include/trace/events/workqueue.h +++ b/include/trace/events/workqueue.h | |||
| @@ -7,38 +7,83 @@ | |||
| 7 | #include <linux/tracepoint.h> | 7 | #include <linux/tracepoint.h> |
| 8 | #include <linux/workqueue.h> | 8 | #include <linux/workqueue.h> |
| 9 | 9 | ||
| 10 | DECLARE_EVENT_CLASS(workqueue_work, | ||
| 11 | |||
| 12 | TP_PROTO(struct work_struct *work), | ||
| 13 | |||
| 14 | TP_ARGS(work), | ||
| 15 | |||
| 16 | TP_STRUCT__entry( | ||
| 17 | __field( void *, work ) | ||
| 18 | ), | ||
| 19 | |||
| 20 | TP_fast_assign( | ||
| 21 | __entry->work = work; | ||
| 22 | ), | ||
| 23 | |||
| 24 | TP_printk("work struct %p", __entry->work) | ||
| 25 | ); | ||
| 26 | |||
| 10 | /** | 27 | /** |
| 11 | * workqueue_execute_start - called immediately before the workqueue callback | 28 | * workqueue_queue_work - called when a work gets queued |
| 29 | * @req_cpu: the requested cpu | ||
| 30 | * @cwq: pointer to struct cpu_workqueue_struct | ||
| 12 | * @work: pointer to struct work_struct | 31 | * @work: pointer to struct work_struct |
| 13 | * | 32 | * |
| 14 | * Allows to track workqueue execution. | 33 | * This event occurs when a work is queued immediately or once a |
| 34 | * delayed work is actually queued on a workqueue (ie: once the delay | ||
| 35 | * has been reached). | ||
| 15 | */ | 36 | */ |
| 16 | TRACE_EVENT(workqueue_execute_start, | 37 | TRACE_EVENT(workqueue_queue_work, |
| 17 | 38 | ||
| 18 | TP_PROTO(struct work_struct *work), | 39 | TP_PROTO(unsigned int req_cpu, struct cpu_workqueue_struct *cwq, |
| 40 | struct work_struct *work), | ||
| 19 | 41 | ||
| 20 | TP_ARGS(work), | 42 | TP_ARGS(req_cpu, cwq, work), |
| 21 | 43 | ||
| 22 | TP_STRUCT__entry( | 44 | TP_STRUCT__entry( |
| 23 | __field( void *, work ) | 45 | __field( void *, work ) |
| 24 | __field( void *, function) | 46 | __field( void *, function) |
| 47 | __field( void *, workqueue) | ||
| 48 | __field( unsigned int, req_cpu ) | ||
| 49 | __field( unsigned int, cpu ) | ||
| 25 | ), | 50 | ), |
| 26 | 51 | ||
| 27 | TP_fast_assign( | 52 | TP_fast_assign( |
| 28 | __entry->work = work; | 53 | __entry->work = work; |
| 29 | __entry->function = work->func; | 54 | __entry->function = work->func; |
| 55 | __entry->workqueue = cwq->wq; | ||
| 56 | __entry->req_cpu = req_cpu; | ||
| 57 | __entry->cpu = cwq->gcwq->cpu; | ||
| 30 | ), | 58 | ), |
| 31 | 59 | ||
| 32 | TP_printk("work struct %p: function %pf", __entry->work, __entry->function) | 60 | TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u", |
| 61 | __entry->work, __entry->function, __entry->workqueue, | ||
| 62 | __entry->req_cpu, __entry->cpu) | ||
| 33 | ); | 63 | ); |
| 34 | 64 | ||
| 35 | /** | 65 | /** |
| 36 | * workqueue_execute_end - called immediately before the workqueue callback | 66 | * workqueue_activate_work - called when a work gets activated |
| 67 | * @work: pointer to struct work_struct | ||
| 68 | * | ||
| 69 | * This event occurs when a queued work is put on the active queue, | ||
| 70 | * which happens immediately after queueing unless @max_active limit | ||
| 71 | * is reached. | ||
| 72 | */ | ||
| 73 | DEFINE_EVENT(workqueue_work, workqueue_activate_work, | ||
| 74 | |||
| 75 | TP_PROTO(struct work_struct *work), | ||
| 76 | |||
| 77 | TP_ARGS(work) | ||
| 78 | ); | ||
| 79 | |||
| 80 | /** | ||
| 81 | * workqueue_execute_start - called immediately before the workqueue callback | ||
| 37 | * @work: pointer to struct work_struct | 82 | * @work: pointer to struct work_struct |
| 38 | * | 83 | * |
| 39 | * Allows to track workqueue execution. | 84 | * Allows to track workqueue execution. |
| 40 | */ | 85 | */ |
| 41 | TRACE_EVENT(workqueue_execute_end, | 86 | TRACE_EVENT(workqueue_execute_start, |
| 42 | 87 | ||
| 43 | TP_PROTO(struct work_struct *work), | 88 | TP_PROTO(struct work_struct *work), |
| 44 | 89 | ||
| @@ -46,15 +91,29 @@ TRACE_EVENT(workqueue_execute_end, | |||
| 46 | 91 | ||
| 47 | TP_STRUCT__entry( | 92 | TP_STRUCT__entry( |
| 48 | __field( void *, work ) | 93 | __field( void *, work ) |
| 94 | __field( void *, function) | ||
| 49 | ), | 95 | ), |
| 50 | 96 | ||
| 51 | TP_fast_assign( | 97 | TP_fast_assign( |
| 52 | __entry->work = work; | 98 | __entry->work = work; |
| 99 | __entry->function = work->func; | ||
| 53 | ), | 100 | ), |
| 54 | 101 | ||
| 55 | TP_printk("work struct %p", __entry->work) | 102 | TP_printk("work struct %p: function %pf", __entry->work, __entry->function) |
| 56 | ); | 103 | ); |
| 57 | 104 | ||
| 105 | /** | ||
| 106 | * workqueue_execute_end - called immediately before the workqueue callback | ||
| 107 | * @work: pointer to struct work_struct | ||
| 108 | * | ||
| 109 | * Allows to track workqueue execution. | ||
| 110 | */ | ||
| 111 | DEFINE_EVENT(workqueue_work, workqueue_execute_end, | ||
| 112 | |||
| 113 | TP_PROTO(struct work_struct *work), | ||
| 114 | |||
| 115 | TP_ARGS(work) | ||
| 116 | ); | ||
| 58 | 117 | ||
| 59 | #endif /* _TRACE_WORKQUEUE_H */ | 118 | #endif /* _TRACE_WORKQUEUE_H */ |
| 60 | 119 | ||
