drivers/scsi/arm/fas216.h

Source file repositories/reference/linux-study-clean/drivers/scsi/arm/fas216.h

File Facts

System
Linux kernel
Corpus path
drivers/scsi/arm/fas216.h
Extension
.h
Size
14157 bytes
Lines
408
Domain
Driver Families
Bucket
drivers/scsi
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct fas216_device {
		unsigned char	disconnect_ok:1;	/* device can disconnect		*/
		unsigned char	parity_enabled:1;	/* parity checking enabled		*/
		unsigned char	parity_check:1;		/* need to check parity checking	*/
		unsigned char	period;			/* sync xfer period in (*4ns)		*/
		unsigned char	stp;			/* synchronous transfer period		*/
		unsigned char	sof;			/* synchronous offset register		*/
		unsigned char	wide_xfer;		/* currently negociated wide transfer	*/
		neg_t		sync_state;		/* synchronous transfer mode		*/
		neg_t		wide_state;		/* wide transfer mode			*/
	} device[8];
	unsigned long	busyluns[64/sizeof(unsigned long)];/* array of bits indicating LUNs busy	*/

	/* dma */
	struct {
		fasdmatype_t	transfer_type;		/* current type of DMA transfer		*/
		fasdmatype_t	(*setup) (struct Scsi_Host *host, struct scsi_pointer *SCp, fasdmadir_t direction, fasdmatype_t min_dma);
		void		(*pseudo)(struct Scsi_Host *host, struct scsi_pointer *SCp, fasdmadir_t direction, int transfer);
		void		(*stop)  (struct Scsi_Host *host, struct scsi_pointer *SCp);
	} dma;

	/* miscellaneous */
	int			internal_done;		/* flag to indicate request done */
	struct scsi_eh_save	ses;		/* holds request sense restore info */
	unsigned long		magic_end;
} FAS216_Info;

/* driver-private data per SCSI command. */
struct fas216_cmd_priv {
	/*
	 * @scsi_pointer must be the first member. See also arm_scsi_pointer().
	 */
	struct scsi_pointer scsi_pointer;
	void (*scsi_done)(struct scsi_cmnd *cmd);
};

static inline struct fas216_cmd_priv *fas216_cmd_priv(struct scsi_cmnd *cmd)
{
	return scsi_cmd_priv(cmd);
}

/* Function: int fas216_init (struct Scsi_Host *instance)
 * Purpose : initialise FAS/NCR/AMD SCSI structures.
 * Params  : instance - a driver-specific filled-out structure
 * Returns : 0 on success
 */
extern int fas216_init (struct Scsi_Host *instance);

/* Function: int fas216_add (struct Scsi_Host *instance, struct device *dev)
 * Purpose : initialise FAS/NCR/AMD SCSI ic.
 * Params  : instance - a driver-specific filled-out structure
 * Returns : 0 on success
 */
extern int fas216_add (struct Scsi_Host *instance, struct device *dev);

/* Function: enum scsi_qc_status fas216_queue_command(struct Scsi_Host *h, struct scsi_cmnd *SCpnt)
 * Purpose : queue a command for adapter to process.
 * Params  : h - host adapter
 *	   : SCpnt - Command to queue
 * Returns : 0 - success, else error
 */
extern enum scsi_qc_status fas216_queue_command(struct Scsi_Host *h,
						struct scsi_cmnd *SCpnt);

/* Function: enum scsi_qc_status fas216_noqueue_command(struct Scsi_Host *h,
 * struct scsi_cmnd *SCpnt)
 * Purpose : queue a command for adapter to process, and process it to completion.
 * Params  : h - host adapter
 *	   : SCpnt - Command to queue
 * Returns : 0 - success, else error
 */
extern enum scsi_qc_status fas216_noqueue_command(struct Scsi_Host *h,
						  struct scsi_cmnd *SCpnt);

/* Function: irqreturn_t fas216_intr (FAS216_Info *info)
 * Purpose : handle interrupts from the interface to progress a command
 * Params  : info - interface to service
 */
extern irqreturn_t fas216_intr (FAS216_Info *info);

extern void fas216_remove (struct Scsi_Host *instance);

/* Function: void fas216_release (struct Scsi_Host *instance)
 * Purpose : release all resources and put everything to bed for FAS/NCR/AMD SCSI ic.
 * Params  : instance - a driver-specific filled-out structure
 * Returns : 0 on success
 */
extern void fas216_release (struct Scsi_Host *instance);

extern void fas216_print_host(FAS216_Info *info, struct seq_file *m);

Annotation

Implementation Notes