mirror of
https://github.com/marqs85/ossc
synced 2025-04-09 22:56:34 +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__ */
|