mirror of
				https://github.com/marqs85/ossc
				synced 2025-10-31 07:56:03 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /******************************************************************************
 | |
| *                                                                             *
 | |
| * License Agreement                                                           *
 | |
| *                                                                             *
 | |
| * Copyright (c) 2015 Altera Corporation, San Jose, California, USA.           *
 | |
| * All rights reserved.                                                        *
 | |
| *                                                                             *
 | |
| * Permission is hereby granted, free of charge, to any person obtaining a     *
 | |
| * copy of this software and associated documentation files (the "Software"),  *
 | |
| * to deal in the Software without restriction, including without limitation   *
 | |
| * the rights to use, copy, modify, merge, publish, distribute, sublicense,    *
 | |
| * and/or sell copies of the Software, and to permit persons to whom the       *
 | |
| * Software is furnished to do so, subject to the following conditions:        *
 | |
| *                                                                             *
 | |
| * The above copyright notice and this permission notice shall be included in  *
 | |
| * all copies or substantial portions of the Software.                         *
 | |
| *                                                                             *
 | |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  *
 | |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,    *
 | |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
 | |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      *
 | |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING     *
 | |
| * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER         *
 | |
| * DEALINGS IN THE SOFTWARE.                                                   *
 | |
| *                                                                             *
 | |
| * This agreement shall be governed in all respects by the laws of the State   *
 | |
| * of California and by the laws of the United States of America.              *
 | |
| *                                                                             *
 | |
| ******************************************************************************/
 | |
| 
 | |
| #ifndef __ALT_EPCQ_CONTROLLER2_H__
 | |
| #define __ALT_EPCQ_CONTROLLER2_H__
 | |
| 
 | |
| #include "alt_types.h"
 | |
| #include "sys/alt_flash_dev.h"
 | |
| #include "sys/alt_llist.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C"
 | |
| {
 | |
| #endif /* __cplusplus */
 | |
| 
 | |
| /**
 | |
|  *  Description of the EPCQ controller
 | |
|  */
 | |
| typedef struct alt_epcq_controller2_dev
 | |
| {
 | |
|     alt_flash_dev dev;
 | |
| 
 | |
|     alt_u32 data_base; /** base address of data slave */
 | |
|     alt_u32 data_end; /** end address of data slave (not inclusive) */
 | |
|     alt_u32 csr_base; /** base address of CSR slave */
 | |
|     alt_u32 size_in_bytes; /** size of memory in bytes */
 | |
|     alt_u32 is_epcs; /** 1 if device is an EPCS device */
 | |
|     alt_u32 number_of_sectors; /** number of flash sectors */
 | |
|     alt_u32 sector_size; /** size of each flash sector */
 | |
|     alt_u32 page_size; /** page size */
 | |
|     alt_u32 silicon_id; /** ID of silicon used with EPCQ IP */
 | |
| } alt_epcq_controller2_dev;
 | |
| 
 | |
| /**
 | |
| *   Macros used by alt_sys_init.c to create data storage for driver instance
 | |
| */
 | |
| #define ALTERA_EPCQ_CONTROLLER2_AVL_MEM_AVL_CSR_INSTANCE(epcq_name, avl_mem, avl_csr, epcq_dev) \
 | |
| static alt_epcq_controller2_dev epcq_dev =                                                       \
 | |
| {                                                                                               \
 | |
|   .dev = {                                                                                      \
 | |
|             .llist = ALT_LLIST_ENTRY,                                                           \
 | |
|             .name = avl_mem##_NAME,                                                             \
 | |
|             .write = alt_epcq_controller2_write,                                                 \
 | |
|             .read = alt_epcq_controller2_read,                                                   \
 | |
|             .get_info = alt_epcq_controller2_get_info,                                           \
 | |
|             .erase_block = alt_epcq_controller2_erase_block,                                     \
 | |
|             .write_block = alt_epcq_controller2_write_block,                                     \
 | |
|             .base_addr = ((void*)(avl_mem##_BASE)),                                             \
 | |
|             .length = ((int)(avl_mem##_SPAN)),                                                  \
 | |
|             .lock = alt_epcq_controller2_lock ,                                                  \
 | |
|          },                                                                                     \
 | |
|   .data_base = ((alt_u32)(avl_mem##_BASE)),   							\
 | |
|   .data_end = ((alt_u32)(avl_mem##_BASE) + (alt_u32)(avl_mem##_SPAN)),	                        \
 | |
|   .csr_base = ((alt_u32)(avl_csr##_BASE)),   							\
 | |
|   .size_in_bytes = ((alt_u32)(avl_mem##_SPAN)),         				        \
 | |
|   .is_epcs = ((alt_u32)(avl_mem##_IS_EPCS)),							\
 | |
|   .number_of_sectors = ((alt_u32)(avl_mem##_NUMBER_OF_SECTORS)),			        \
 | |
|   .sector_size = ((alt_u32)(avl_mem##_SECTOR_SIZE)),						\
 | |
|   .page_size = ((alt_u32)(avl_mem##_PAGE_SIZE))	,						\
 | |
| }
 | |
| 
 | |
| /*
 | |
|     Public API
 | |
| 
 | |
|     Refer to Using Flash Devices in the
 | |
|     Developing Programs Using the Hardware Abstraction Layer chapter
 | |
|     of the Nios II Software Developer's Handbook.
 | |
| 
 | |
| */
 | |
| int alt_epcq_controller2_read(alt_flash_dev *flash_info, int offset, void *dest_addr, int length);
 | |
| 
 | |
| int alt_epcq_controller2_get_info(alt_flash_fd *fd, flash_region **info, int *number_of_regions);
 | |
| 
 | |
| int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset);
 | |
| 
 | |
| int alt_epcq_controller2_write_block(alt_flash_dev *flash_info, int block_offset, int data_offset, const void *data, int length);
 | |
| 
 | |
| int alt_epcq_controller2_write(alt_flash_dev *flash_info, int offset, const void *src_addr, int length);
 | |
| 
 | |
| int alt_epcq_controller2_lock(alt_flash_dev *flash_info, alt_u32 sectors_to_lock);
 | |
| 
 | |
| 
 | |
| /*
 | |
|  * Initialization function
 | |
|  */
 | |
| extern alt_32 altera_epcq_controller2_init(alt_epcq_controller2_dev *dev);
 | |
| 
 | |
| /*
 | |
|  * alt_sys_init.c will call this macro automatically initialize the driver instance
 | |
|  */
 | |
| #define ALTERA_EPCQ_CONTROLLER2_INIT(name, dev) 	\
 | |
| 		altera_epcq_controller2_init(&dev);
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif /* __cplusplus */
 | |
| 
 | |
| #endif /* __ALT_EPCQ_CONTROLLER2_H__ */
 | 
