105491d2cSKalle Valo /*
205491d2cSKalle Valo  * Copyright (c) 2010 Broadcom Corporation
305491d2cSKalle Valo  *
405491d2cSKalle Valo  * Permission to use, copy, modify, and/or distribute this software for any
505491d2cSKalle Valo  * purpose with or without fee is hereby granted, provided that the above
605491d2cSKalle Valo  * copyright notice and this permission notice appear in all copies.
705491d2cSKalle Valo  *
805491d2cSKalle Valo  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
905491d2cSKalle Valo  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1005491d2cSKalle Valo  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
1105491d2cSKalle Valo  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1205491d2cSKalle Valo  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
1305491d2cSKalle Valo  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
1405491d2cSKalle Valo  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1505491d2cSKalle Valo  */
1605491d2cSKalle Valo #ifndef	_BRCM_UCODE_H_
1705491d2cSKalle Valo #define	_BRCM_UCODE_H_
1805491d2cSKalle Valo 
1905491d2cSKalle Valo #include "types.h"		/* forward structure declarations */
2005491d2cSKalle Valo 
2105491d2cSKalle Valo #define MIN_FW_SIZE 40000	/* minimum firmware file size in bytes */
2205491d2cSKalle Valo #define MAX_FW_SIZE 150000
2305491d2cSKalle Valo 
2405491d2cSKalle Valo #define UCODE_LOADER_API_VER 0
2505491d2cSKalle Valo 
2605491d2cSKalle Valo struct d11init;
2705491d2cSKalle Valo 
2805491d2cSKalle Valo struct brcms_ucode {
2905491d2cSKalle Valo 	struct d11init *d11lcn0bsinitvals24;
3005491d2cSKalle Valo 	struct d11init *d11lcn0initvals24;
3105491d2cSKalle Valo 	struct d11init *d11lcn1bsinitvals24;
3205491d2cSKalle Valo 	struct d11init *d11lcn1initvals24;
3305491d2cSKalle Valo 	struct d11init *d11lcn2bsinitvals24;
3405491d2cSKalle Valo 	struct d11init *d11lcn2initvals24;
3505491d2cSKalle Valo 	struct d11init *d11n0absinitvals16;
3605491d2cSKalle Valo 	struct d11init *d11n0bsinitvals16;
3705491d2cSKalle Valo 	struct d11init *d11n0initvals16;
3805491d2cSKalle Valo 	__le32 *bcm43xx_16_mimo;
3905491d2cSKalle Valo 	size_t bcm43xx_16_mimosz;
4005491d2cSKalle Valo 	__le32 *bcm43xx_24_lcn;
4105491d2cSKalle Valo 	size_t bcm43xx_24_lcnsz;
4205491d2cSKalle Valo 	u32 *bcm43xx_bommajor;
4305491d2cSKalle Valo 	u32 *bcm43xx_bomminor;
4405491d2cSKalle Valo };
4505491d2cSKalle Valo 
4605491d2cSKalle Valo int brcms_ucode_data_init(struct brcms_info *wl, struct brcms_ucode *ucode);
4705491d2cSKalle Valo 
4805491d2cSKalle Valo void brcms_ucode_data_free(struct brcms_ucode *ucode);
4905491d2cSKalle Valo 
5005491d2cSKalle Valo int brcms_ucode_init_buf(struct brcms_info *wl, void **pbuf, unsigned int idx);
5105491d2cSKalle Valo int brcms_ucode_init_uint(struct brcms_info *wl, size_t *n_bytes,
5205491d2cSKalle Valo 			  unsigned int idx);
5305491d2cSKalle Valo void brcms_ucode_free_buf(void *);
5405491d2cSKalle Valo int  brcms_check_firmwares(struct brcms_info *wl);
5505491d2cSKalle Valo 
5605491d2cSKalle Valo #endif	/* _BRCM_UCODE_H_ */
57