brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 9ad7f84 Raw
111 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/* Copyright 2014 Cisco Systems, Inc.  All rights reserved. */3 4#ifndef __SNIC_DISC_H5#define __SNIC_DISC_H6 7#include "snic_fwint.h"8 9enum snic_disc_state {10	SNIC_DISC_NONE,11	SNIC_DISC_INIT,12	SNIC_DISC_PENDING,13	SNIC_DISC_DONE14};15 16struct snic;17struct snic_disc {18	struct list_head tgt_list;19	enum snic_disc_state state;20	struct mutex mutex;21	u16	disc_id;22	u8	req_cnt;23	u32	nxt_tgt_id;24	u32	rtgt_cnt;25	u8	*rtgt_info;26	struct delayed_work disc_timeout;27	void (*cb)(struct snic *);28};29 30#define SNIC_TGT_NAM_LEN	1631 32enum snic_tgt_state {33	SNIC_TGT_STAT_NONE,34	SNIC_TGT_STAT_INIT,35	SNIC_TGT_STAT_ONLINE,	/* Target is Online */36	SNIC_TGT_STAT_OFFLINE,	/* Target is Offline */37	SNIC_TGT_STAT_DEL,38};39 40struct snic_tgt_priv {41	struct list_head list;42	enum snic_tgt_type typ;43	u16 disc_id;44	char *name[SNIC_TGT_NAM_LEN];45 46	union {47		/*DAS Target specific info */48		/*SAN Target specific info */49		u8 dummmy;50	} u;51};52 53/* snic tgt flags */54#define SNIC_TGT_SCAN_PENDING	0x0155 56struct snic_tgt {57	struct list_head list;58	u16	id;59	u16	channel;60	u32	flags;61	u32	scsi_tgt_id;62	enum snic_tgt_state state;63	struct device dev;64	struct work_struct scan_work;65	struct work_struct del_work;66	struct snic_tgt_priv tdata;67};68 69 70struct snic_fw_req;71 72void snic_disc_init(struct snic_disc *);73int snic_disc_start(struct snic *);74void snic_disc_term(struct snic *);75int snic_report_tgt_cmpl_handler(struct snic *, struct snic_fw_req *);76int snic_tgtinfo_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq);77void snic_process_report_tgts_rsp(struct work_struct *);78void snic_handle_tgt_disc(struct work_struct *);79void snic_handle_disc(struct work_struct *);80void snic_tgt_dev_release(struct device *);81void snic_tgt_del_all(struct snic *);82 83#define dev_to_tgt(d) \84	container_of(d, struct snic_tgt, dev)85 86static inline int87is_snic_target(struct device *dev)88{89	return dev->release == snic_tgt_dev_release;90}91 92#define starget_to_tgt(st)	\93	(is_snic_target(((struct scsi_target *) st)->dev.parent) ? \94		dev_to_tgt(st->dev.parent) : NULL)95 96#define snic_tgt_to_shost(t)	\97	dev_to_shost(t->dev.parent)98 99static inline int100snic_tgt_chkready(struct snic_tgt *tgt)101{102	if (tgt->state == SNIC_TGT_STAT_ONLINE)103		return 0;104	else105		return DID_NO_CONNECT << 16;106}107 108const char *snic_tgt_state_to_str(int);109int snic_tgt_scsi_abort_io(struct snic_tgt *);110#endif /* end of  __SNIC_DISC_H */111