Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

isci: uplevel register hardware data structures and unsolicited frame handling

Reported-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

+121 -257
+1 -1
drivers/scsi/isci/Makefile
··· 5 5 host.o task.o probe_roms.o \ 6 6 remote_node_context.o \ 7 7 remote_node_table.o \ 8 + unsolicited_frame_control.o \ 8 9 core/scic_sds_request.o \ 9 10 core/scic_sds_stp_request.o \ 10 11 core/scic_sds_port.o \ ··· 13 12 core/scic_sds_phy.o \ 14 13 core/scic_sds_ssp_request.o \ 15 14 core/scic_sds_smp_request.o \ 16 - core/scic_sds_unsolicited_frame_control.o \ 17 15 core/sci_base_state_machine.o \ 18 16 core/sci_util.o
+1 -1
drivers/scsi/isci/core/scic_sds_phy.h
··· 58 58 59 59 #include "sas.h" 60 60 #include "scic_phy.h" 61 - #include "scu_registers.h" 61 + #include "registers.h" 62 62 #include "sci_base_state_machine.h" 63 63 #include <scsi/libsas.h> 64 64
+1 -1
drivers/scsi/isci/core/scic_sds_port.c
··· 61 61 #include "remote_device.h" 62 62 #include "remote_node_context.h" 63 63 #include "scic_sds_request.h" 64 - #include "scu_registers.h" 64 + #include "registers.h" 65 65 #include "timers.h" 66 66 67 67 #define SCIC_SDS_PORT_MIN_TIMER_COUNT (SCI_MAX_PORTS)
+1 -1
drivers/scsi/isci/core/scic_sds_port.h
··· 59 59 #include <linux/kernel.h> 60 60 #include "isci.h" 61 61 #include "sas.h" 62 - #include "scu_registers.h" 62 + #include "registers.h" 63 63 #include "sci_base_state_machine.h" 64 64 65 65 struct scic_sds_controller;
-66
drivers/scsi/isci/core/scic_sds_port_registers.h
··· 1 - /* 2 - * This file is provided under a dual BSD/GPLv2 license. When using or 3 - * redistributing this file, you may do so under either license. 4 - * 5 - * GPL LICENSE SUMMARY 6 - * 7 - * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8 - * 9 - * This program is free software; you can redistribute it and/or modify 10 - * it under the terms of version 2 of the GNU General Public License as 11 - * published by the Free Software Foundation. 12 - * 13 - * This program is distributed in the hope that it will be useful, but 14 - * WITHOUT ANY WARRANTY; without even the implied warranty of 15 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 - * General Public License for more details. 17 - * 18 - * You should have received a copy of the GNU General Public License 19 - * along with this program; if not, write to the Free Software 20 - * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21 - * The full GNU General Public License is included in this distribution 22 - * in the file called LICENSE.GPL. 23 - * 24 - * BSD LICENSE 25 - * 26 - * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 27 - * All rights reserved. 28 - * 29 - * Redistribution and use in source and binary forms, with or without 30 - * modification, are permitted provided that the following conditions 31 - * are met: 32 - * 33 - * * Redistributions of source code must retain the above copyright 34 - * notice, this list of conditions and the following disclaimer. 35 - * * Redistributions in binary form must reproduce the above copyright 36 - * notice, this list of conditions and the following disclaimer in 37 - * the documentation and/or other materials provided with the 38 - * distribution. 39 - * * Neither the name of Intel Corporation nor the names of its 40 - * contributors may be used to endorse or promote products derived 41 - * from this software without specific prior written permission. 42 - * 43 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 44 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 45 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 46 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 47 - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 48 - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 49 - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 50 - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 51 - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 52 - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 53 - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 - */ 55 - 56 - #ifndef _SCIC_SDS_PORT_REGISTERS_H_ 57 - #define _SCIC_SDS_PORT_REGISTERS_H_ 58 - 59 - /** 60 - * This file contains a set of macros that assist in reading the SCU hardware 61 - * registers. 62 - * 63 - * 64 - */ 65 - 66 - #endif /* _SCIC_SDS_PORT_REGISTERS_H_ */
+2 -2
drivers/scsi/isci/core/scic_sds_request.c
··· 55 55 56 56 #include <scsi/sas.h> 57 57 #include "scic_io_request.h" 58 - #include "scu_registers.h" 58 + #include "registers.h" 59 59 #include "scic_sds_port.h" 60 60 #include "remote_device.h" 61 61 #include "scic_sds_request.h" 62 62 #include "scic_sds_smp_request.h" 63 63 #include "scic_sds_stp_request.h" 64 - #include "scic_sds_unsolicited_frame_control.h" 64 + #include "unsolicited_frame_control.h" 65 65 #include "sci_util.h" 66 66 #include "scu_completion_codes.h" 67 67 #include "scu_task_context.h"
+1 -1
drivers/scsi/isci/core/scic_sds_stp_request.c
··· 62 62 #include "scic_sds_request.h" 63 63 #include "scic_sds_stp_pio_request.h" 64 64 #include "scic_sds_stp_request.h" 65 - #include "scic_sds_unsolicited_frame_control.h" 65 + #include "unsolicited_frame_control.h" 66 66 #include "sci_util.h" 67 67 #include "scu_completion_codes.h" 68 68 #include "scu_event_codes.h"
+2 -2
drivers/scsi/isci/core/scic_sds_unsolicited_frame_control.c drivers/scsi/isci/unsolicited_frame_control.c
··· 54 54 */ 55 55 56 56 #include "host.h" 57 - #include "scic_sds_unsolicited_frame_control.h" 58 - #include "scu_registers.h" 57 + #include "unsolicited_frame_control.h" 58 + #include "registers.h" 59 59 #include "sci_util.h" 60 60 61 61 /**
drivers/scsi/isci/core/scic_sds_unsolicited_frame_control.h drivers/scsi/isci/unsolicited_frame_control.h
drivers/scsi/isci/core/scu_completion_codes.h drivers/scsi/isci/scu_completion_codes.h
drivers/scsi/isci/core/scu_event_codes.h drivers/scsi/isci/scu_event_codes.h
+109 -1
drivers/scsi/isci/core/scu_registers.h drivers/scsi/isci/registers.h
··· 63 63 * 64 64 */ 65 65 66 - #include "scu_viit_data.h" 66 + #define SCU_VIIT_ENTRY_ID_MASK (0xC0000000) 67 + #define SCU_VIIT_ENTRY_ID_SHIFT (30) 67 68 69 + #define SCU_VIIT_ENTRY_FUNCTION_MASK (0x0FF00000) 70 + #define SCU_VIIT_ENTRY_FUNCTION_SHIFT (20) 71 + 72 + #define SCU_VIIT_ENTRY_IPPTMODE_MASK (0x0001F800) 73 + #define SCU_VIIT_ENTRY_IPPTMODE_SHIFT (12) 74 + 75 + #define SCU_VIIT_ENTRY_LPVIE_MASK (0x00000F00) 76 + #define SCU_VIIT_ENTRY_LPVIE_SHIFT (8) 77 + 78 + #define SCU_VIIT_ENTRY_STATUS_MASK (0x000000FF) 79 + #define SCU_VIIT_ENTRY_STATUS_SHIFT (0) 80 + 81 + #define SCU_VIIT_ENTRY_ID_INVALID (0 << SCU_VIIT_ENTRY_ID_SHIFT) 82 + #define SCU_VIIT_ENTRY_ID_VIIT (1 << SCU_VIIT_ENTRY_ID_SHIFT) 83 + #define SCU_VIIT_ENTRY_ID_IIT (2 << SCU_VIIT_ENTRY_ID_SHIFT) 84 + #define SCU_VIIT_ENTRY_ID_VIRT_EXP (3 << SCU_VIIT_ENTRY_ID_SHIFT) 85 + 86 + #define SCU_VIIT_IPPT_SSP_INITIATOR (0x01 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 87 + #define SCU_VIIT_IPPT_SMP_INITIATOR (0x02 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 88 + #define SCU_VIIT_IPPT_STP_INITIATOR (0x04 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 89 + #define SCU_VIIT_IPPT_INITIATOR \ 90 + (\ 91 + SCU_VIIT_IPPT_SSP_INITIATOR \ 92 + | SCU_VIIT_IPPT_SMP_INITIATOR \ 93 + | SCU_VIIT_IPPT_STP_INITIATOR \ 94 + ) 95 + 96 + #define SCU_VIIT_STATUS_RNC_VALID (0x01 << SCU_VIIT_ENTRY_STATUS_SHIFT) 97 + #define SCU_VIIT_STATUS_ADDRESS_VALID (0x02 << SCU_VIIT_ENTRY_STATUS_SHIFT) 98 + #define SCU_VIIT_STATUS_RNI_VALID (0x04 << SCU_VIIT_ENTRY_STATUS_SHIFT) 99 + #define SCU_VIIT_STATUS_ALL_VALID \ 100 + (\ 101 + SCU_VIIT_STATUS_RNC_VALID \ 102 + | SCU_VIIT_STATUS_ADDRESS_VALID \ 103 + | SCU_VIIT_STATUS_RNI_VALID \ 104 + ) 105 + 106 + #define SCU_VIIT_IPPT_SMP_TARGET (0x10 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 107 + 108 + /** 109 + * struct scu_viit_entry - This is the SCU Virtual Initiator Table Entry 110 + * 111 + * 112 + */ 113 + struct scu_viit_entry { 114 + /** 115 + * This must be encoded as to the type of initiator that is being constructed 116 + * for this port. 117 + */ 118 + u32 status; 119 + 120 + /** 121 + * Virtual initiator high SAS Address 122 + */ 123 + u32 initiator_sas_address_hi; 124 + 125 + /** 126 + * Virtual initiator low SAS Address 127 + */ 128 + u32 initiator_sas_address_lo; 129 + 130 + /** 131 + * This must be 0 132 + */ 133 + u32 reserved; 134 + 135 + }; 136 + 137 + 138 + /* IIT Status Defines */ 139 + #define SCU_IIT_ENTRY_ID_MASK (0xC0000000) 140 + #define SCU_IIT_ENTRY_ID_SHIFT (30) 141 + 142 + #define SCU_IIT_ENTRY_STATUS_UPDATE_MASK (0x20000000) 143 + #define SCU_IIT_ENTRY_STATUS_UPDATE_SHIFT (29) 144 + 145 + #define SCU_IIT_ENTRY_LPI_MASK (0x00000F00) 146 + #define SCU_IIT_ENTRY_LPI_SHIFT (8) 147 + 148 + #define SCU_IIT_ENTRY_STATUS_MASK (0x000000FF) 149 + #define SCU_IIT_ENTRY_STATUS_SHIFT (0) 150 + 151 + /* IIT Remote Initiator Defines */ 152 + #define SCU_IIT_ENTRY_REMOTE_TAG_MASK (0x0000FFFF) 153 + #define SCU_IIT_ENTRY_REMOTE_TAG_SHIFT (0) 154 + 155 + #define SCU_IIT_ENTRY_REMOTE_RNC_MASK (0x0FFF0000) 156 + #define SCU_IIT_ENTRY_REMOTE_RNC_SHIFT (16) 157 + 158 + #define SCU_IIT_ENTRY_ID_INVALID (0 << SCU_IIT_ENTRY_ID_SHIFT) 159 + #define SCU_IIT_ENTRY_ID_VIIT (1 << SCU_IIT_ENTRY_ID_SHIFT) 160 + #define SCU_IIT_ENTRY_ID_IIT (2 << SCU_IIT_ENTRY_ID_SHIFT) 161 + #define SCU_IIT_ENTRY_ID_VIRT_EXP (3 << SCU_IIT_ENTRY_ID_SHIFT) 162 + 163 + /** 164 + * struct scu_iit_entry - This will be implemented later when we support 165 + * virtual functions 166 + * 167 + * 168 + */ 169 + struct scu_iit_entry { 170 + u32 status; 171 + u32 remote_initiator_sas_address_hi; 172 + u32 remote_initiator_sas_address_lo; 173 + u32 remote_initiator; 174 + 175 + }; 68 176 69 177 /* Generate a value for an SCU register */ 70 178 #define SCU_GEN_VALUE(name, value) \
drivers/scsi/isci/core/scu_task_context.h drivers/scsi/isci/scu_task_context.h
drivers/scsi/isci/core/scu_unsolicited_frame.h drivers/scsi/isci/scu_unsolicited_frame.h
-178
drivers/scsi/isci/core/scu_viit_data.h
··· 1 - /* 2 - * This file is provided under a dual BSD/GPLv2 license. When using or 3 - * redistributing this file, you may do so under either license. 4 - * 5 - * GPL LICENSE SUMMARY 6 - * 7 - * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8 - * 9 - * This program is free software; you can redistribute it and/or modify 10 - * it under the terms of version 2 of the GNU General Public License as 11 - * published by the Free Software Foundation. 12 - * 13 - * This program is distributed in the hope that it will be useful, but 14 - * WITHOUT ANY WARRANTY; without even the implied warranty of 15 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 - * General Public License for more details. 17 - * 18 - * You should have received a copy of the GNU General Public License 19 - * along with this program; if not, write to the Free Software 20 - * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21 - * The full GNU General Public License is included in this distribution 22 - * in the file called LICENSE.GPL. 23 - * 24 - * BSD LICENSE 25 - * 26 - * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 27 - * All rights reserved. 28 - * 29 - * Redistribution and use in source and binary forms, with or without 30 - * modification, are permitted provided that the following conditions 31 - * are met: 32 - * 33 - * * Redistributions of source code must retain the above copyright 34 - * notice, this list of conditions and the following disclaimer. 35 - * * Redistributions in binary form must reproduce the above copyright 36 - * notice, this list of conditions and the following disclaimer in 37 - * the documentation and/or other materials provided with the 38 - * distribution. 39 - * * Neither the name of Intel Corporation nor the names of its 40 - * contributors may be used to endorse or promote products derived 41 - * from this software without specific prior written permission. 42 - * 43 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 44 - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 45 - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 46 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 47 - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 48 - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 49 - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 50 - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 51 - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 52 - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 53 - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 - */ 55 - 56 - #ifndef _SCU_VIIT_DATA_HEADER_ 57 - #define _SCU_VIIT_DATA_HEADER_ 58 - 59 - /** 60 - * This file contains the constants and structures for the SCU hardware VIIT 61 - * table entries. 62 - * 63 - * 64 - */ 65 - 66 - 67 - #define SCU_VIIT_ENTRY_ID_MASK (0xC0000000) 68 - #define SCU_VIIT_ENTRY_ID_SHIFT (30) 69 - 70 - #define SCU_VIIT_ENTRY_FUNCTION_MASK (0x0FF00000) 71 - #define SCU_VIIT_ENTRY_FUNCTION_SHIFT (20) 72 - 73 - #define SCU_VIIT_ENTRY_IPPTMODE_MASK (0x0001F800) 74 - #define SCU_VIIT_ENTRY_IPPTMODE_SHIFT (12) 75 - 76 - #define SCU_VIIT_ENTRY_LPVIE_MASK (0x00000F00) 77 - #define SCU_VIIT_ENTRY_LPVIE_SHIFT (8) 78 - 79 - #define SCU_VIIT_ENTRY_STATUS_MASK (0x000000FF) 80 - #define SCU_VIIT_ENTRY_STATUS_SHIFT (0) 81 - 82 - #define SCU_VIIT_ENTRY_ID_INVALID (0 << SCU_VIIT_ENTRY_ID_SHIFT) 83 - #define SCU_VIIT_ENTRY_ID_VIIT (1 << SCU_VIIT_ENTRY_ID_SHIFT) 84 - #define SCU_VIIT_ENTRY_ID_IIT (2 << SCU_VIIT_ENTRY_ID_SHIFT) 85 - #define SCU_VIIT_ENTRY_ID_VIRT_EXP (3 << SCU_VIIT_ENTRY_ID_SHIFT) 86 - 87 - #define SCU_VIIT_IPPT_SSP_INITIATOR (0x01 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 88 - #define SCU_VIIT_IPPT_SMP_INITIATOR (0x02 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 89 - #define SCU_VIIT_IPPT_STP_INITIATOR (0x04 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 90 - #define SCU_VIIT_IPPT_INITIATOR \ 91 - (\ 92 - SCU_VIIT_IPPT_SSP_INITIATOR \ 93 - | SCU_VIIT_IPPT_SMP_INITIATOR \ 94 - | SCU_VIIT_IPPT_STP_INITIATOR \ 95 - ) 96 - 97 - #define SCU_VIIT_STATUS_RNC_VALID (0x01 << SCU_VIIT_ENTRY_STATUS_SHIFT) 98 - #define SCU_VIIT_STATUS_ADDRESS_VALID (0x02 << SCU_VIIT_ENTRY_STATUS_SHIFT) 99 - #define SCU_VIIT_STATUS_RNI_VALID (0x04 << SCU_VIIT_ENTRY_STATUS_SHIFT) 100 - #define SCU_VIIT_STATUS_ALL_VALID \ 101 - (\ 102 - SCU_VIIT_STATUS_RNC_VALID \ 103 - | SCU_VIIT_STATUS_ADDRESS_VALID \ 104 - | SCU_VIIT_STATUS_RNI_VALID \ 105 - ) 106 - 107 - #define SCU_VIIT_IPPT_SMP_TARGET (0x10 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 108 - 109 - /** 110 - * struct scu_viit_entry - This is the SCU Virtual Initiator Table Entry 111 - * 112 - * 113 - */ 114 - struct scu_viit_entry { 115 - /** 116 - * This must be encoded as to the type of initiator that is being constructed 117 - * for this port. 118 - */ 119 - u32 status; 120 - 121 - /** 122 - * Virtual initiator high SAS Address 123 - */ 124 - u32 initiator_sas_address_hi; 125 - 126 - /** 127 - * Virtual initiator low SAS Address 128 - */ 129 - u32 initiator_sas_address_lo; 130 - 131 - /** 132 - * This must be 0 133 - */ 134 - u32 reserved; 135 - 136 - }; 137 - 138 - 139 - /* IIT Status Defines */ 140 - #define SCU_IIT_ENTRY_ID_MASK (0xC0000000) 141 - #define SCU_IIT_ENTRY_ID_SHIFT (30) 142 - 143 - #define SCU_IIT_ENTRY_STATUS_UPDATE_MASK (0x20000000) 144 - #define SCU_IIT_ENTRY_STATUS_UPDATE_SHIFT (29) 145 - 146 - #define SCU_IIT_ENTRY_LPI_MASK (0x00000F00) 147 - #define SCU_IIT_ENTRY_LPI_SHIFT (8) 148 - 149 - #define SCU_IIT_ENTRY_STATUS_MASK (0x000000FF) 150 - #define SCU_IIT_ENTRY_STATUS_SHIFT (0) 151 - 152 - /* IIT Remote Initiator Defines */ 153 - #define SCU_IIT_ENTRY_REMOTE_TAG_MASK (0x0000FFFF) 154 - #define SCU_IIT_ENTRY_REMOTE_TAG_SHIFT (0) 155 - 156 - #define SCU_IIT_ENTRY_REMOTE_RNC_MASK (0x0FFF0000) 157 - #define SCU_IIT_ENTRY_REMOTE_RNC_SHIFT (16) 158 - 159 - #define SCU_IIT_ENTRY_ID_INVALID (0 << SCU_IIT_ENTRY_ID_SHIFT) 160 - #define SCU_IIT_ENTRY_ID_VIIT (1 << SCU_IIT_ENTRY_ID_SHIFT) 161 - #define SCU_IIT_ENTRY_ID_IIT (2 << SCU_IIT_ENTRY_ID_SHIFT) 162 - #define SCU_IIT_ENTRY_ID_VIRT_EXP (3 << SCU_IIT_ENTRY_ID_SHIFT) 163 - 164 - /** 165 - * struct scu_iit_entry - This will be implemented later when we support 166 - * virtual functions 167 - * 168 - * 169 - */ 170 - struct scu_iit_entry { 171 - u32 status; 172 - u32 remote_initiator_sas_address_hi; 173 - u32 remote_initiator_sas_address_lo; 174 - u32 remote_initiator; 175 - 176 - }; 177 - 178 - #endif /* _SCU_VIIT_DATA_HEADER_ */
+1 -1
drivers/scsi/isci/host.c
··· 66 66 #include "sci_util.h" 67 67 #include "scu_completion_codes.h" 68 68 #include "scu_event_codes.h" 69 - #include "scu_registers.h" 69 + #include "registers.h" 70 70 #include "scu_remote_node_context.h" 71 71 #include "scu_task_context.h" 72 72 #include "scu_unsolicited_frame.h"
+2 -2
drivers/scsi/isci/host.h
··· 61 61 #include "pool.h" 62 62 #include "sci_base_state_machine.h" 63 63 #include "remote_node_table.h" 64 - #include "scu_registers.h" 64 + #include "registers.h" 65 65 #include "scu_unsolicited_frame.h" 66 - #include "scic_sds_unsolicited_frame_control.h" 66 + #include "unsolicited_frame_control.h" 67 67 #include "scic_sds_port_configuration_agent.h" 68 68 69 69 struct scic_sds_request;