81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Minix3 USB mass storage driver definitions
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _USB_STORAGE_H_
 | 
						|
#define _USB_STORAGE_H_
 | 
						|
 | 
						|
#include <minix/driver.h>		/* struct device */
 | 
						|
#include <minix/type.h>			/* vir_bytes */
 | 
						|
/* TODO: no header for ddekit_usb_dev */
 | 
						|
 | 
						|
#include "urb_helper.h"
 | 
						|
 | 
						|
/* Number of handled peripherals (USB devices) */
 | 
						|
#define MAX_PERIPHS			(1)
 | 
						|
/* Number of handled disks per driver */
 | 
						|
#define MAX_DRIVES			(4)
 | 
						|
/* 4 partitions per disk */
 | 
						|
#define PART_PER_DISK			(4)
 | 
						|
/* 4 sub partitions per partition */
 | 
						|
#define SUBPART_PER_PART		(4)
 | 
						|
/* 16 sub partitions per disk */
 | 
						|
#define SUBPART_PER_DISK		(PART_PER_DISK * SUBPART_PER_PART)
 | 
						|
 | 
						|
/*---------------------------*
 | 
						|
 *    declared types         *
 | 
						|
 *---------------------------*/
 | 
						|
/* Information on opened mass storage drives */
 | 
						|
typedef struct mass_storage_drive {
 | 
						|
 | 
						|
	struct device disk;			/* disk device */
 | 
						|
	struct device part[PART_PER_DISK];	/* partition devices */
 | 
						|
	struct device subpart[SUBPART_PER_DISK];/* sub-partition devices */
 | 
						|
	unsigned long open_ct;			/* opening counter */
 | 
						|
	int drive_idx;				/* Index of this drive */
 | 
						|
}
 | 
						|
mass_storage_drive;
 | 
						|
 | 
						|
/* Information on attached peripherals (USB devices) */
 | 
						|
typedef struct mass_storage_periph {
 | 
						|
 | 
						|
	mass_storage_drive drives[MAX_DRIVES];	/* Possible drive info */
 | 
						|
	struct ddekit_usb_dev * dev;		/* DDEKit device handler */
 | 
						|
	unsigned int interfaces;		/* Interfaces bitmap */
 | 
						|
	urb_ep_config ep_in;			/* Bulk IN endpoint */
 | 
						|
	urb_ep_config ep_out;			/* Bulk OUT endpoint */
 | 
						|
}
 | 
						|
mass_storage_periph;
 | 
						|
 | 
						|
/* Structure for the information on current state of driver */
 | 
						|
typedef struct mass_storage_state {
 | 
						|
 | 
						|
	/* DDEKit device handlers */
 | 
						|
	mass_storage_periph periph[MAX_PERIPHS];
 | 
						|
 | 
						|
	/* Currently used peripheral */
 | 
						|
	mass_storage_periph * cur_periph;
 | 
						|
 | 
						|
	/* Currently used drive */
 | 
						|
	mass_storage_drive * cur_drive;
 | 
						|
 | 
						|
	/* Currently used device (drive/partition/sub-partition) */
 | 
						|
	struct device * cur_device;
 | 
						|
 | 
						|
	/* Driver instance */
 | 
						|
	long instance;
 | 
						|
}
 | 
						|
mass_storage_state;
 | 
						|
 | 
						|
/* State of current IO vector array for transfer operations */
 | 
						|
typedef struct iov_state {
 | 
						|
 | 
						|
	vir_bytes base_addr;		/* Address to read/write or grant ID */
 | 
						|
	vir_bytes remaining_bytes;	/* How many bytes remain in vector */
 | 
						|
	vir_bytes offset;		/* How many bytes were copied */
 | 
						|
	unsigned int iov_idx;		/* Index of currently selected vector */
 | 
						|
}
 | 
						|
iov_state;
 | 
						|
 | 
						|
#endif /* !_USB_STORAGE_H_ */
 |