cvmx-flash.h revision 210284
1210284Sjmallett/***********************license start***************
2210284Sjmallett *  Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights
3210284Sjmallett *  reserved.
4210284Sjmallett *
5210284Sjmallett *
6210284Sjmallett *  Redistribution and use in source and binary forms, with or without
7210284Sjmallett *  modification, are permitted provided that the following conditions are
8210284Sjmallett *  met:
9210284Sjmallett *
10210284Sjmallett *      * Redistributions of source code must retain the above copyright
11210284Sjmallett *        notice, this list of conditions and the following disclaimer.
12210284Sjmallett *
13210284Sjmallett *      * Redistributions in binary form must reproduce the above
14210284Sjmallett *        copyright notice, this list of conditions and the following
15210284Sjmallett *        disclaimer in the documentation and/or other materials provided
16210284Sjmallett *        with the distribution.
17210284Sjmallett *
18210284Sjmallett *      * Neither the name of Cavium Networks nor the names of
19210284Sjmallett *        its contributors may be used to endorse or promote products
20210284Sjmallett *        derived from this software without specific prior written
21210284Sjmallett *        permission.
22210284Sjmallett *
23210284Sjmallett *  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
24210284Sjmallett *  AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS
25210284Sjmallett *  OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
26210284Sjmallett *  RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
27210284Sjmallett *  REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
28210284Sjmallett *  DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES
29210284Sjmallett *  OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR
30210284Sjmallett *  PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET
31210284Sjmallett *  POSSESSION OR CORRESPONDENCE TO DESCRIPTION.  THE ENTIRE RISK ARISING OUT
32210284Sjmallett *  OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
33210284Sjmallett *
34210284Sjmallett *
35210284Sjmallett *  For any questions regarding licensing please contact marketing@caviumnetworks.com
36210284Sjmallett *
37210284Sjmallett ***********************license end**************************************/
38210284Sjmallett
39210284Sjmallett
40210284Sjmallett
41210284Sjmallett
42210284Sjmallett
43210284Sjmallett
44210284Sjmallett/**
45210284Sjmallett * @file
46210284Sjmallett *
47210284Sjmallett * This file provides bootbus flash operations
48210284Sjmallett *
49210284Sjmallett * <hr>$Revision: 41586 $<hr>
50210284Sjmallett *
51210284Sjmallett *
52210284Sjmallett */
53210284Sjmallett
54210284Sjmallett
55210284Sjmallett#ifndef __CVMX_FLASH_H__
56210284Sjmallett#define __CVMX_FLASH_H__
57210284Sjmallett
58210284Sjmallett#ifdef	__cplusplus
59210284Sjmallettextern "C" {
60210284Sjmallett#endif
61210284Sjmallett
62210284Sjmalletttypedef struct
63210284Sjmallett{
64210284Sjmallett    int start_offset;
65210284Sjmallett    int block_size;
66210284Sjmallett    int num_blocks;
67210284Sjmallett} cvmx_flash_region_t;
68210284Sjmallett
69210284Sjmallett/**
70210284Sjmallett * Initialize the flash access library
71210284Sjmallett */
72210284Sjmallettvoid cvmx_flash_initialize(void);
73210284Sjmallett
74210284Sjmallett/**
75210284Sjmallett * Return a pointer to the flash chip
76210284Sjmallett *
77210284Sjmallett * @param chip_id Chip ID to return
78210284Sjmallett * @return NULL if the chip doesn't exist
79210284Sjmallett */
80210284Sjmallettvoid *cvmx_flash_get_base(int chip_id);
81210284Sjmallett
82210284Sjmallett/**
83210284Sjmallett * Return the number of erasable regions on the chip
84210284Sjmallett *
85210284Sjmallett * @param chip_id Chip to return info for
86210284Sjmallett * @return Number of regions
87210284Sjmallett */
88210284Sjmallettint cvmx_flash_get_num_regions(int chip_id);
89210284Sjmallett
90210284Sjmallett/**
91210284Sjmallett * Return information about a flash chips region
92210284Sjmallett *
93210284Sjmallett * @param chip_id Chip to get info for
94210284Sjmallett * @param region  Region to get info for
95210284Sjmallett * @return Region information
96210284Sjmallett */
97210284Sjmallettconst cvmx_flash_region_t *cvmx_flash_get_region_info(int chip_id, int region);
98210284Sjmallett
99210284Sjmallett/**
100210284Sjmallett * Erase a block on the flash chip
101210284Sjmallett *
102210284Sjmallett * @param chip_id Chip to erase a block on
103210284Sjmallett * @param region  Region to erase a block in
104210284Sjmallett * @param block   Block number to erase
105210284Sjmallett * @return Zero on success. Negative on failure
106210284Sjmallett */
107210284Sjmallettint cvmx_flash_erase_block(int chip_id, int region, int block);
108210284Sjmallett
109210284Sjmallett/**
110210284Sjmallett * Write a block on the flash chip
111210284Sjmallett *
112210284Sjmallett * @param chip_id Chip to write a block on
113210284Sjmallett * @param region  Region to write a block in
114210284Sjmallett * @param block   Block number to write
115210284Sjmallett * @param data    Data to write
116210284Sjmallett * @return Zero on success. Negative on failure
117210284Sjmallett */
118210284Sjmallettint cvmx_flash_write_block(int chip_id, int region, int block, const void *data);
119210284Sjmallett
120210284Sjmallett/**
121210284Sjmallett * Erase and write data to a flash
122210284Sjmallett *
123210284Sjmallett * @param address Memory address to write to
124210284Sjmallett * @param data    Data to write
125210284Sjmallett * @param len     Length of the data
126210284Sjmallett * @return Zero on success. Negative on failure
127210284Sjmallett */
128210284Sjmallettint cvmx_flash_write(void *address, const void *data, int len);
129210284Sjmallett
130210284Sjmallett#ifdef	__cplusplus
131210284Sjmallett}
132210284Sjmallett#endif
133210284Sjmallett
134210284Sjmallett#endif /* __CVMX_FLASH_H__ */
135