VSF Documented
vsf_scsi.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_SCSI_H__
19#define __VSF_SCSI_H__
20
30/*============================ INCLUDES ======================================*/
31
32#include "./vsf_scsi_cfg.h"
33
34#if VSF_USE_SCSI == ENABLED
35
36#include "kernel/vsf_kernel.h"
37
38#if defined(__VSF_SCSI_CLASS_IMPLEMENT)
39# define __VSF_CLASS_IMPLEMENT__
40#elif defined(__VSF_SCSI_CLASS_INHERIT__)
41# define __VSF_CLASS_INHERIT__
42#endif
43
44#include "utilities/ooc_class.h"
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50/*============================ MACROS ========================================*/
51/*============================ MACROFIED FUNCTIONS ===========================*/
52/*============================ TYPES =========================================*/
53
56
57typedef enum scsi_sensekey_t {
73
74typedef enum scsi_asc_t {
84
85typedef enum scsi_group_code_t {
92
93typedef enum scsi_cmd_code_t {
95 SCSI_CMDCODE_ATA_COMMAND_PASS_THROUGH12 = 0x01, // SCSI_GROUPCODE12
96 SCSI_CMDCODE_REQUEST_SENSE = 0x03, // SCSI_GROUPCODE6
97 SCSI_CMDCODE_READ_FORMAT_CAPACITIES = 0x03, // SCSI_GROUPCODE10_1
98 SCSI_CMDCODE_READ_TOC = 0x03, // SCSI_GROUPCODE10_2
99 SCSI_CMDCODE_REPORT_ID_INFO = 0x03, // SCSI_GROUPCODE12
102 SCSI_CMDCODE_ATA_COMMAND_PASS_THROUGH16 = 0x05, // SCSI_GROUPCODE16
104 SCSI_CMDCODE_SERVICE_ACTION_OUT12 = 0x09, // SCSI_GROUPCODE12
106 SCSI_CMDCODE_GET_EVENT_STATUS_NOTIFY = 0x0A, // SCSI_GROUPCODE10_2
107 SCSI_CMDCODE_SERVICE_ACTION_IN12 = 0x0B, // SCSI_GROUPCODE12
108 SCSI_CMDCODE_SERVICE_ACTION_IN16 = 0x0E, // SCSI_GROUPCODE16
110 SCSI_CMDCODE_SYNC_CACHE16 = 0x11, // SCSI_GROUPCODE16
112 SCSI_CMDCODE_MODE_SELECT = 0x15, // SCSI_GROUPCODE6 & SCSI_GROUPCODE10_2
113 SCSI_CMDCODE_SYNC_CACHE10 = 0x15, // SCSI_GROUPCODE10_1
118 SCSI_CMDCODE_SERVICE_ACTION_OUT16 = 0x1F, // SCSI_GROUPCODE16
120
121typedef struct scsi_inquiry_t {
132
134 protected_member(
137 vsf_peda_evthandler_t execute;
138#if VSF_USE_SIMPLE_STREAM == ENABLED
139 vsf_peda_evthandler_t execute_stream;
140#endif
141 bool (*buffer)(vk_scsi_t *pthis, uint8_t *cbd, vsf_mem_t *mem);
143};
144
145
147 public_member(
148 const vk_scsi_drv_t *drv;
149 void *param;
151};
152
153#if defined(__VSF_SCSI_CLASS_IMPLEMENT) || defined(__VSF_SCSI_CLASS_INHERIT__)
157 uint8_t *cbd;
158 vsf_mem_t mem;
159# if VSF_USE_SIMPLE_STREAM == ENABLED
160 vsf_stream_t *stream;
161# endif
162)
163# if VSF_USE_SIMPLE_STREAM == ENABLED
165 uint8_t *cbd;
166 vsf_stream_t *stream;
167)
168# endif
169#endif
170
171/*============================ GLOBAL VARIABLES ==============================*/
172/*============================ PROTOTYPES ====================================*/
173
174extern vsf_err_t vk_scsi_init(vk_scsi_t *pthis);
175extern vsf_err_t vk_scsi_fini(vk_scsi_t *pthis);
176// used to get mem from driver, if supported
177extern bool vk_scsi_prepare_buffer(vk_scsi_t *pthis, uint8_t *cbd, vsf_mem_t *mem);
178extern vsf_err_t vk_scsi_execute(vk_scsi_t *pthis, uint8_t *cbd, vsf_mem_t *mem);
179#if VSF_USE_SIMPLE_STREAM == ENABLED
181#endif
182
183#ifdef __VSF_SCSI_CLASS_INHERIT__
184extern bool vk_scsi_get_rw_param(uint8_t *scsi_cmd, uint64_t *addr, uint32_t *size);
186#endif
187
188#ifdef __cplusplus
189}
190#endif
191
192/*============================ INCLUDES ======================================*/
193
196
197#undef __VSF_SCSI_CLASS_IMPLEMENT
198#undef __VSF_SCSI_CLASS_INHERIT__
199
200#endif // VSF_USE_SCSI
201#endif // __VSF_SCSI_H__
#define ENABLED
Definition __type.h:28
vsf_err_t
Definition __type.h:42
bool
Definition type.h:60
Definition vsf_scsi.h:133
Definition vsf_scsi.h:146
Definition vsf_simple_stream.h:254
#define vsf_dcl_class
Definition ooc_class.h:46
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned uint32_t
Definition stdint.h:9
unsigned long long uint64_t
Definition stdint.h:11
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_scsi.h:121
uint8_t type
Definition vsf_scsi.h:122
uint8_t removable
Definition vsf_scsi.h:123
uint8_t vendor[8]
Definition vsf_scsi.h:128
uint8_t version
Definition vsf_scsi.h:124
uint8_t product[16]
Definition vsf_scsi.h:129
uint8_t reserved[3]
Definition vsf_scsi.h:127
uint8_t additional_length
Definition vsf_scsi.h:126
uint8_t data_format
Definition vsf_scsi.h:125
uint8_t revision[4]
Definition vsf_scsi.h:130
Definition vsf_utilities.h:51
#define __vsf_component_peda_ifs(__peda_name,...)
Definition vsf_component_cfg.h:62
#define vsf_peda_evthandler_t
Definition vsf_component_cfg.h:37
uint32_t size
Definition vsf_memfs.h:50
struct vk_romfs_header_t VSF_CAL_PACKED
bool vk_scsi_get_rw_param(uint8_t *cbd, uint64_t *addr, uint32_t *size)
Definition vsf_scsi.c:126
uint_fast8_t vk_scsi_get_command_len(uint8_t *cbd)
Definition vsf_scsi.c:112
vsf_err_t vk_scsi_execute_stream(vk_scsi_t *pthis, uint8_t *cbd, vsf_stream_t *stream)
Definition vsf_scsi.c:95
bool vk_scsi_prepare_buffer(vk_scsi_t *pthis, uint8_t *cbd, vsf_mem_t *mem)
Definition vsf_scsi.c:61
scsi_cmd_code_t
Definition vsf_scsi.h:93
@ SCSI_CMDCODE_SERVICE_ACTION_OUT16
Definition vsf_scsi.h:118
@ SCSI_CMDCODE_MODE_SELECT
Definition vsf_scsi.h:112
@ SCSI_CMDCODE_SEND_DIAGNOSTIC
Definition vsf_scsi.h:116
@ SCSI_CMDCODE_VERIFY
Definition vsf_scsi.h:109
@ SCSI_CMDCODE_READ
Definition vsf_scsi.h:103
@ SCSI_CMDCODE_TEST_UNIT_READY
Definition vsf_scsi.h:94
@ SCSI_CMDCODE_MODE_SENSE
Definition vsf_scsi.h:114
@ SCSI_CMDCODE_READ_TOC
Definition vsf_scsi.h:98
@ SCSI_CMDCODE_REQUEST_SENSE
Definition vsf_scsi.h:96
@ SCSI_CMDCODE_START_STOP_UNIT
Definition vsf_scsi.h:115
@ SCSI_CMDCODE_SERVICE_ACTION_OUT12
Definition vsf_scsi.h:104
@ SCSI_CMDCODE_ATA_COMMAND_PASS_THROUGH16
Definition vsf_scsi.h:102
@ SCSI_CMDCODE_SERVICE_ACTION_IN12
Definition vsf_scsi.h:107
@ SCSI_CMDCODE_GET_EVENT_STATUS_NOTIFY
Definition vsf_scsi.h:106
@ SCSI_CMDCODE_ATA_COMMAND_PASS_THROUGH12
Definition vsf_scsi.h:95
@ SCSI_CMDCODE_SYNC_CACHE10
Definition vsf_scsi.h:113
@ SCSI_CMDCODE_SYNC_CACHE16
Definition vsf_scsi.h:110
@ SCSI_CMDCODE_READ_FORMAT_CAPACITIES
Definition vsf_scsi.h:97
@ SCSI_CMDCODE_INQUIRY
Definition vsf_scsi.h:111
@ SCSI_CMDCODE_FORMAT_UNIT
Definition vsf_scsi.h:100
@ SCSI_CMDCODE_ALLOW_MEDIUM_REMOVAL
Definition vsf_scsi.h:117
@ SCSI_CMDCODE_READ_CAPACITY
Definition vsf_scsi.h:101
@ SCSI_CMDCODE_REPORT_ID_INFO
Definition vsf_scsi.h:99
@ SCSI_CMDCODE_WRITE
Definition vsf_scsi.h:105
@ SCSI_CMDCODE_SERVICE_ACTION_IN16
Definition vsf_scsi.h:108
vsf_err_t vk_scsi_fini(vk_scsi_t *pthis)
Definition vsf_scsi.c:53
scsi_asc_t
Definition vsf_scsi.h:74
@ SCSI_ASC_INVALID_COMMAND
Definition vsf_scsi.h:77
@ SCSI_ASC_ADDRESS_OUT_OF_RANGE
Definition vsf_scsi.h:81
@ SCSI_ASC_NONE
Definition vsf_scsi.h:75
@ SCSI_ASC_INVALID_FIELD_IN_COMMAND
Definition vsf_scsi.h:78
@ SCSI_ASC_INVALID_FIELD_IN_PARAMETER_LIST
Definition vsf_scsi.h:79
@ SCSI_ASC_MEDIUM_HAVE_CHANGED
Definition vsf_scsi.h:80
@ SCSI_ASC_PARAMETER_LIST_LENGTH_ERROR
Definition vsf_scsi.h:76
@ SCSI_ASC_MEDIUM_NOT_PRESENT
Definition vsf_scsi.h:82
scsi_sensekey_t
This module provides SCSI device class which can execute SCSI commands. !
Definition vsf_scsi.h:57
@ SCSI_SENSEKEY_BLANK_CHECK
Definition vsf_scsi.h:66
@ SCSI_SENSEKEY_DATA_PROTECT
Definition vsf_scsi.h:65
@ SCSI_SENSEKEY_MEDIUM_ERROR
Definition vsf_scsi.h:61
@ SCSI_SENSEKEY_NO_SENSE
Definition vsf_scsi.h:58
@ SCSI_SENSEKEY_ABORTED_COMMAND
Definition vsf_scsi.h:69
@ SCSI_SENSEKEY_VOLUME_OVERFLOW
Definition vsf_scsi.h:70
@ SCSI_SENSEKEY_UNIT_ATTENTION
Definition vsf_scsi.h:64
@ SCSI_SENSEKEY_NOT_READY
Definition vsf_scsi.h:60
@ SCSI_SENSEKEY_ILLEGAL_REQUEST
Definition vsf_scsi.h:63
@ SCSI_SENSEKEY_COPY_ABORTED
Definition vsf_scsi.h:68
@ SCSI_SENSEKEY_RECOVERED_ERROR
Definition vsf_scsi.h:59
@ SCSI_SENSEKEY_MISCOMPARE
Definition vsf_scsi.h:71
@ SCSI_SENSEKEY_HARDWARE_ERROR
Definition vsf_scsi.h:62
@ SCSI_SENSEKEY_VENDOR_SPECIFIC
Definition vsf_scsi.h:67
vsf_err_t vk_scsi_execute(vk_scsi_t *pthis, uint8_t *cbd, vsf_mem_t *mem)
Definition vsf_scsi.c:72
scsi_group_code_t
Definition vsf_scsi.h:85
@ SCSI_GROUPCODE6
Definition vsf_scsi.h:86
@ SCSI_GROUPCODE12
Definition vsf_scsi.h:90
@ SCSI_GROUPCODE10_2
Definition vsf_scsi.h:88
@ SCSI_GROUPCODE10_1
Definition vsf_scsi.h:87
@ SCSI_GROUPCODE16
Definition vsf_scsi.h:89
vsf_err_t vk_scsi_init(vk_scsi_t *pthis)
Definition vsf_scsi.c:45