| /* |
| * Copyright (C) 2009 Broadcom Corporation |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * This program 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 this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| */ |
| |
| #ifndef _ASM_BRCMSTB_BRCMAPI_H |
| #define _ASM_BRCMSTB_BRCMAPI_H |
| |
| #ifdef __KERNEL__ |
| |
| #include <linux/spinlock.h> |
| #include <linux/skbuff.h> |
| #include <linux/dma-mapping.h> |
| #include <linux/device.h> |
| #include <linux/types.h> |
| #include <linux/cache.h> |
| #include <linux/slab.h> |
| #include <linux/mm_types.h> |
| #include <linux/scatterlist.h> |
| |
| #include <net/sock.h> |
| |
| #if defined(CONFIG_MIPS) |
| #include <asm/ptrace.h> |
| #include <asm/inst.h> |
| #include <asm/bug.h> |
| #include <asm/page.h> |
| #endif |
| |
| /*********************************************************************** |
| * Kernel hooks |
| ***********************************************************************/ |
| |
| #define BRCM_RX_NUM_HOOKS 2 |
| #define BRCM_RX_HOOK_NETACCEL 0 |
| #define BRCM_RX_HOOK_EROUTER 1 |
| |
| #if defined(CONFIG_MIPS) |
| void __init brcm_free_bootmem(unsigned long addr, unsigned long size); |
| void brcm_tlb_init(void); |
| unsigned long brcm_setup_ebase(void); |
| int brcm_simulate_opcode(struct pt_regs *regs, unsigned int opcode); |
| int brcm_unaligned_fp(void __user *addr, union mips_instruction *insn, |
| struct pt_regs *regs); |
| int brcm_cacheflush(unsigned long addr, unsigned long bytes, |
| unsigned int cache); |
| void brcm_sync_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, |
| enum dma_data_direction dir); |
| void brcm_sync_for_cpu_sg(struct scatterlist *sg, enum dma_data_direction dir); |
| unsigned long brcm_fixup_ticks(unsigned long delta); |
| extern unsigned long brcm_adj_cpu_khz; |
| int brcm_map_coherent(dma_addr_t dma_handle, void *cac_va, size_t size, |
| void **uncac_va, gfp_t gfp); |
| void *brcm_unmap_coherent(void *vaddr); |
| #endif |
| extern int (*brcm_netif_rx_hook[BRCM_RX_NUM_HOOKS])(struct sk_buff *); |
| |
| /*********************************************************************** |
| * BSP External API |
| ***********************************************************************/ |
| |
| /* RAC extension to sys_cacheflush() */ |
| #define RACACHE (1<<31) /* read-ahead cache / prefetching L2 */ |
| |
| struct brcm_cache_info { |
| int max_writeback; |
| int max_writethrough; |
| int prefetch_enabled; |
| }; |
| |
| struct brcm_ocap_info { |
| unsigned long ocap_part_start; |
| unsigned long ocap_part_len; |
| int docsis_platform; |
| }; |
| |
| int bmem_find_region(unsigned long addr, unsigned long size); |
| int bmem_region_info(int idx, unsigned long *addr, unsigned long *size); |
| int bmem_get_page(struct mm_struct *mm, struct vm_area_struct *vma, |
| unsigned long start, struct page **page); |
| |
| void brcm_inv_prefetch(unsigned long addr, unsigned long size); |
| void brcm_get_cache_info(struct brcm_cache_info *info); |
| |
| void brcm_get_ocap_info(struct brcm_ocap_info *info); |
| |
| static inline void brcm_netif_rx_sethook(unsigned int id, |
| int (*fn)(struct sk_buff *)) { |
| BUG_ON(id >= BRCM_RX_NUM_HOOKS); |
| brcm_netif_rx_hook[id] = fn; |
| } |
| |
| void macaddr_increment(u8 *buf, u8 len, u8 incr); |
| int brcm_alloc_macaddr(u8 *buf, u8 intf_id, bool intf_is_moca); |
| |
| extern spinlock_t brcm_magnum_spinlock; |
| |
| void brcm_set_nmi_handler(void (*fn)(struct pt_regs *)); |
| |
| /*********************************************************************** |
| * New exports of standard kernel symbols |
| ***********************************************************************/ |
| |
| /* for netaccel IPv6 */ |
| extern struct proto udpv6_prot; |
| |
| /* for performance tuning */ |
| extern void (*cpu_wait)(void); |
| |
| /* for power management interrupts */ |
| extern unsigned long ebase; |
| |
| /* for GENET ring buffer support */ |
| extern struct kmem_cache *skbuff_head_cache __read_mostly; |
| |
| /*********************************************************************** |
| * Driver->BSP callbacks |
| ***********************************************************************/ |
| |
| int brcm_pm_register_cb(char *name, int (*fn)(int, void *), void *arg); |
| int brcm_pm_unregister_cb(char *name); |
| |
| struct brcm_wakeup_ops { |
| int (*enable)(void *ref); |
| int (*disable)(void *ref); |
| int (*poll)(void *ref); /* returns 1 if a wakeup event occurred */ |
| }; |
| |
| int brcm_pm_wakeup_register(struct brcm_wakeup_ops *ops, void* ref, char* name); |
| int brcm_pm_wakeup_unregister(struct brcm_wakeup_ops *ops, void* ref); |
| |
| #endif /* __KERNEL__ */ |
| |
| #endif /* _ASM_BRCMSTB_BRCMAPI_H */ |