Merge branch 'linus' into cont_syslog
[safe/jmp/linux-2.6] / include / linux / pktcdvd.h
index 4b32bce..721301b 100644 (file)
@@ -30,7 +30,7 @@
 
 /*
  * use drive write caching -- we need deferred error handling to be
- * able to sucessfully recover with this option (drive will return good
+ * able to successfully recover with this option (drive will return good
  * status as soon as the cdb is validated).
  */
 #if defined(CONFIG_CDROM_PKTCDVD_WCACHE)
@@ -111,10 +111,18 @@ struct pkt_ctrl_command {
 #include <linux/blkdev.h>
 #include <linux/completion.h>
 #include <linux/cdrom.h>
+#include <linux/kobject.h>
+#include <linux/sysfs.h>
+#include <linux/mempool.h>
+
+/* default bio write queue congestion marks */
+#define PKT_WRITE_CONGESTION_ON    10000
+#define PKT_WRITE_CONGESTION_OFF   9000
+
 
 struct packet_settings
 {
-       __u                   size;           /* packet size in (512 byte) sectors */
+       __u32                   size;           /* packet size in (512 byte) sectors */
        __u8                    fp;             /* fixed packets */
        __u8                    link_loss;      /* the rest is specified
                                                 * as per Mt Fuji */
@@ -155,10 +163,8 @@ struct packet_iosched
        atomic_t                attention;      /* Set to non-zero when queue processing is needed */
        int                     writing;        /* Non-zero when writing, zero when reading */
        spinlock_t              lock;           /* Protecting read/write queue manipulations */
-       struct bio              *read_queue;
-       struct bio              *read_queue_tail;
-       struct bio              *write_queue;
-       struct bio              *write_queue_tail;
+       struct bio_list         read_queue;
+       struct bio_list         write_queue;
        sector_t                last_write;     /* The sector where the last write ended */
        int                     successive_reads;
 };
@@ -166,8 +172,11 @@ struct packet_iosched
 /*
  * 32 buffers of 2048 bytes
  */
-#define PACKET_MAX_SIZE                32
-#define PAGES_PER_PACKET       (PACKET_MAX_SIZE * CD_FRAMESIZE / PAGE_SIZE)
+#if (PAGE_SIZE % CD_FRAMESIZE) != 0
+#error "PAGE_SIZE must be a multiple of CD_FRAMESIZE"
+#endif
+#define PACKET_MAX_SIZE                128
+#define FRAMES_PER_PAGE                (PAGE_SIZE / CD_FRAMESIZE)
 #define PACKET_MAX_SECTORS     (PACKET_MAX_SIZE * CD_FRAMESIZE >> 9)
 
 enum packet_data_state {
@@ -195,8 +204,8 @@ struct packet_data
        spinlock_t              lock;           /* Lock protecting state transitions and */
                                                /* orig_bios list */
 
-       struct bio              *orig_bios;     /* Original bios passed to pkt_make_request */
-       struct bio              *orig_bios_tail;/* that will be handled by this packet */
+       struct bio_list         orig_bios;      /* Original bios passed to pkt_make_request */
+                                               /* that will be handled by this packet */
        int                     write_size;     /* Total size of all bios in the orig_bios */
                                                /* list, measured in number of frames */
 
@@ -216,7 +225,7 @@ struct packet_data
        atomic_t                io_errors;      /* Number of read/write errors during IO */
 
        struct bio              *r_bios[PACKET_MAX_SIZE]; /* bios to use during data gathering */
-       struct page             *pages[PAGES_PER_PACKET];
+       struct page             *pages[PACKET_MAX_SIZE / FRAMES_PER_PAGE];
 
        int                     cache_valid;    /* If non-zero, the data for the zone defined */
                                                /* by the sector variable is completely cached */
@@ -238,6 +247,14 @@ struct packet_stacked_data
 };
 #define PSD_POOL_SIZE          64
 
+struct pktcdvd_kobj
+{
+       struct kobject          kobj;
+       struct pktcdvd_device   *pd;
+};
+#define to_pktcdvdkobj(_k) \
+  ((struct pktcdvd_kobj*)container_of(_k,struct pktcdvd_kobj,kobj))
+
 struct pktcdvd_device
 {
        struct block_device     *bdev;          /* dev attached */
@@ -268,6 +285,16 @@ struct pktcdvd_device
 
        struct packet_iosched   iosched;
        struct gendisk          *disk;
+
+       int                     write_congestion_off;
+       int                     write_congestion_on;
+
+       struct device           *dev;           /* sysfs pktcdvd[0-7] dev */
+       struct pktcdvd_kobj     *kobj_stat;     /* sysfs pktcdvd[0-7]/stat/     */
+       struct pktcdvd_kobj     *kobj_wqueue;   /* sysfs pktcdvd[0-7]/write_queue/ */
+
+       struct dentry           *dfs_d_root;    /* debugfs: devname directory */
+       struct dentry           *dfs_f_info;    /* debugfs: info file */
 };
 
 #endif /* __KERNEL__ */