////////////////////////////////////////////////////////////////////////////////// // request_queue.h for Cosmos+ OpenSSD // Copyright (c) 2017 Hanyang University ENC Lab. // Contributed by Yong Ho Song // Jaewook Kwak // // This file is part of Cosmos+ OpenSSD. // // Cosmos+ OpenSSD is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3, or (at your option) // any later version. // // Cosmos+ OpenSSD is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Cosmos+ OpenSSD; see the file COPYING. // If not, see . ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// // Company: ENC Lab. // Engineer: Jaewook Kwak // // Project Name: Cosmos+ OpenSSD // Design Name: Cosmos+ Firmware // Module Name: Request Allocator // File Name: request_queue.h // // Version: v1.0.0 // // Description: // - define data structure of request queue ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// // Revision History: // // * v1.0.0 // - First draft ////////////////////////////////////////////////////////////////////////////////// #ifndef REQUEST_QUEUE_H_ #define REQUEST_QUEUE_H_ typedef struct _FREE_REQUEST_QUEUE { unsigned int headReq : 16; unsigned int tailReq : 16; unsigned int reqCnt : 16; unsigned int reserved0 : 16; } FREE_REQUEST_QUEUE, *P_FREE_REQUEST_QUEUE; typedef struct _SLICE_REQUEST_QUEUE { unsigned int headReq : 16; unsigned int tailReq : 16; unsigned int reqCnt : 16; unsigned int reserved0 : 16; } SLICE_REQUEST_QUEUE, *P_SLICE_REQUEST_QUEUE; typedef struct _BLOCKED_BY_BUFFER_DEPENDENCY_REQUEST_QUEUE { unsigned int headReq : 16; unsigned int tailReq : 16; unsigned int reqCnt : 16; unsigned int reserved0 : 16; } BLOCKED_BY_BUFFER_DEPENDENCY_REQUEST_QUEUE, *P_BLOCKED_BY_BUFFER_DEPENDENCY_REQUEST_QUEUE; typedef struct _BLOCKED_BY_ROW_ADDR_DEPENDENCY_REQUEST_QUEUE { unsigned int headReq : 16; unsigned int tailReq : 16; unsigned int reqCnt : 16; unsigned int reserved0 : 16; } BLOCKED_BY_ROW_ADDR_DEPENDENCY_REQUEST_QUEUE, *PBLOCKED_BY_ROW_ADDR_DEPENDENCY_REQUEST_QUEUE; typedef struct _NVME_DMA_REQUEST_QUEUE { unsigned int headReq : 16; unsigned int tailReq : 16; unsigned int reqCnt : 16; unsigned int reserved0 : 16; } NVME_DMA_REQUEST_QUEUE, *P_NVME_DMA_REQUEST_QUEUE; typedef struct _NAND_REQUEST_QUEUE { unsigned int headReq : 16; unsigned int tailReq : 16; unsigned int reqCnt : 16; unsigned int reserved0 : 16; } NAND_REQUEST_QUEUE, *P_NAND_REQUEST_QUEUE; #endif /* REQUEST_QUEUE_H_ */