#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/raid_class.h>
#include <asm/unaligned.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_tcq.h>
static struct raid_template *myrb_raid_template;
static void myrb_monitor(struct work_struct *work);
static inline void myrb_translate_devstate(void *DeviceState);
static inline int myrb_logical_channel(struct Scsi_Host *shost)
return shost->max_channel - 1;
static struct myrb_devstate_name_entry {
enum myrb_devstate state;
} myrb_devstate_name_list[] = {
{ MYRB_DEVICE_DEAD, "Dead" },
{ MYRB_DEVICE_WO, "WriteOnly" },
{ MYRB_DEVICE_ONLINE, "Online" },
{ MYRB_DEVICE_CRITICAL, "Critical" },
{ MYRB_DEVICE_STANDBY, "Standby" },
{ MYRB_DEVICE_OFFLINE, "Offline" },
static const char *myrb_devstate_name(enum myrb_devstate state)
struct myrb_devstate_name_entry *entry = myrb_devstate_name_list;
for (i = 0; i < ARRAY_SIZE(myrb_devstate_name_list); i++) {
if (entry[i].state == state)
static struct myrb_raidlevel_name_entry {
enum myrb_raidlevel level;
} myrb_raidlevel_name_list[] = {
{ MYRB_RAID_LEVEL0, "RAID0" },
{ MYRB_RAID_LEVEL1, "RAID1" },
{ MYRB_RAID_LEVEL3, "RAID3" },
{ MYRB_RAID_LEVEL5, "RAID5" },
{ MYRB_RAID_LEVEL6, "RAID6" },
{ MYRB_RAID_JBOD, "JBOD" },
static const char *myrb_raidlevel_name(enum myrb_raidlevel level)
struct myrb_raidlevel_name_entry *entry = myrb_raidlevel_name_list;
for (i = 0; i < ARRAY_SIZE(myrb_raidlevel_name_list); i++) {
if (entry[i].level == level)
static bool myrb_create_mempools(struct pci_dev *pdev, struct myrb_hba *cb)
size_t elem_size, elem_align;