10aeed3e9SJustin Hibbits /****************************************************************************** 20aeed3e9SJustin Hibbits 30aeed3e9SJustin Hibbits � 1995-2003, 2004, 2005-2011 Freescale Semiconductor, Inc. 40aeed3e9SJustin Hibbits All rights reserved. 50aeed3e9SJustin Hibbits 60aeed3e9SJustin Hibbits This is proprietary source code of Freescale Semiconductor Inc., 70aeed3e9SJustin Hibbits and its use is subject to the NetComm Device Drivers EULA. 80aeed3e9SJustin Hibbits The copyright notice above does not evidence any actual or intended 90aeed3e9SJustin Hibbits publication of such source code. 100aeed3e9SJustin Hibbits 110aeed3e9SJustin Hibbits ALTERNATIVELY, redistribution and use in source and binary forms, with 120aeed3e9SJustin Hibbits or without modification, are permitted provided that the following 130aeed3e9SJustin Hibbits conditions are met: 140aeed3e9SJustin Hibbits * Redistributions of source code must retain the above copyright 150aeed3e9SJustin Hibbits notice, this list of conditions and the following disclaimer. 160aeed3e9SJustin Hibbits * Redistributions in binary form must reproduce the above copyright 170aeed3e9SJustin Hibbits notice, this list of conditions and the following disclaimer in the 180aeed3e9SJustin Hibbits documentation and/or other materials provided with the distribution. 190aeed3e9SJustin Hibbits * Neither the name of Freescale Semiconductor nor the 200aeed3e9SJustin Hibbits names of its contributors may be used to endorse or promote products 210aeed3e9SJustin Hibbits derived from this software without specific prior written permission. 220aeed3e9SJustin Hibbits 230aeed3e9SJustin Hibbits THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 240aeed3e9SJustin Hibbits EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 250aeed3e9SJustin Hibbits WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 260aeed3e9SJustin Hibbits DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 270aeed3e9SJustin Hibbits DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 280aeed3e9SJustin Hibbits (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 290aeed3e9SJustin Hibbits LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 300aeed3e9SJustin Hibbits ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 310aeed3e9SJustin Hibbits (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 320aeed3e9SJustin Hibbits SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 330aeed3e9SJustin Hibbits * 340aeed3e9SJustin Hibbits 350aeed3e9SJustin Hibbits **************************************************************************/ 360aeed3e9SJustin Hibbits /****************************************************************************** 370aeed3e9SJustin Hibbits @File bman_private.h 380aeed3e9SJustin Hibbits 390aeed3e9SJustin Hibbits @Description BM header 400aeed3e9SJustin Hibbits *//***************************************************************************/ 410aeed3e9SJustin Hibbits #ifndef __BMAN_PRIV_H 420aeed3e9SJustin Hibbits #define __BMAN_PRIV_H 430aeed3e9SJustin Hibbits 440aeed3e9SJustin Hibbits #include "fsl_bman.h" 450aeed3e9SJustin Hibbits 460aeed3e9SJustin Hibbits #define __ERR_MODULE__ MODULE_BM 470aeed3e9SJustin Hibbits 480aeed3e9SJustin Hibbits #if defined(DEBUG) || !defined(DISABLE_ASSERTIONS) 490aeed3e9SJustin Hibbits /* Optionally compile-in assertion-checking */ 500aeed3e9SJustin Hibbits #define BM_CHECKING 510aeed3e9SJustin Hibbits #endif /* defined(DEBUG) || ... */ 520aeed3e9SJustin Hibbits 530aeed3e9SJustin Hibbits /* TODO: NB, we currently assume that CORE_MemoryBarier() and lwsync() imply compiler barriers 540aeed3e9SJustin Hibbits * and that dcbzl(), dcbfl(), and dcbi() won't fall victim to compiler or 550aeed3e9SJustin Hibbits * execution reordering with respect to other code/instructions that manipulate 560aeed3e9SJustin Hibbits * the same cacheline. */ 570aeed3e9SJustin Hibbits 580aeed3e9SJustin Hibbits #define dcbf(addr) \ 590aeed3e9SJustin Hibbits do { \ 600aeed3e9SJustin Hibbits __asm__ __volatile__ ("dcbf 0, %0" : : "r" (addr)); \ 610aeed3e9SJustin Hibbits } while(0) 620aeed3e9SJustin Hibbits 63852ba100SJustin Hibbits #ifdef CORE_E500MC 640aeed3e9SJustin Hibbits #define dcbt_ro(addr) \ 650aeed3e9SJustin Hibbits do { \ 660aeed3e9SJustin Hibbits __asm__ __volatile__ ("dcbt 0, %0" : : "r" (addr)); \ 670aeed3e9SJustin Hibbits } while(0) 680aeed3e9SJustin Hibbits 690aeed3e9SJustin Hibbits #define dcbt_rw(addr) \ 700aeed3e9SJustin Hibbits do { \ 710aeed3e9SJustin Hibbits __asm__ __volatile__ ("dcbtst 0, %0" : : "r" (addr)); \ 720aeed3e9SJustin Hibbits } while(0) 730aeed3e9SJustin Hibbits 740aeed3e9SJustin Hibbits #define dcbzl(p) \ 750aeed3e9SJustin Hibbits do { \ 760aeed3e9SJustin Hibbits __asm__ __volatile__ ("dcbzl 0,%0" : : "r" (p)); \ 770aeed3e9SJustin Hibbits } while(0) 780aeed3e9SJustin Hibbits 790aeed3e9SJustin Hibbits #define dcbz_64(p) \ 800aeed3e9SJustin Hibbits do { \ 810aeed3e9SJustin Hibbits dcbzl(p); \ 820aeed3e9SJustin Hibbits } while (0) 830aeed3e9SJustin Hibbits 840aeed3e9SJustin Hibbits #define dcbf_64(p) \ 850aeed3e9SJustin Hibbits do { \ 860aeed3e9SJustin Hibbits dcbf(p); \ 870aeed3e9SJustin Hibbits } while (0) 880aeed3e9SJustin Hibbits 890aeed3e9SJustin Hibbits /* Commonly used combo */ 900aeed3e9SJustin Hibbits #define dcbit_ro(p) \ 910aeed3e9SJustin Hibbits do { \ 920aeed3e9SJustin Hibbits dcbi(p); \ 930aeed3e9SJustin Hibbits dcbt_ro(p); \ 940aeed3e9SJustin Hibbits } while (0) 950aeed3e9SJustin Hibbits 960aeed3e9SJustin Hibbits #else 970aeed3e9SJustin Hibbits 980aeed3e9SJustin Hibbits #define dcbt_ro(p) \ 990aeed3e9SJustin Hibbits do { \ 1000aeed3e9SJustin Hibbits __asm__ __volatile__ ("dcbt 0,%0" : : "r" (p)); \ 1010aeed3e9SJustin Hibbits lwsync(); \ 1020aeed3e9SJustin Hibbits } while(0) 1030aeed3e9SJustin Hibbits #define dcbz(p) \ 1040aeed3e9SJustin Hibbits do { \ 1050aeed3e9SJustin Hibbits __asm__ __volatile__ ("dcbz 0,%0" : : "r" (p)); \ 1060aeed3e9SJustin Hibbits } while (0) 1070aeed3e9SJustin Hibbits #define dcbz_64(p) \ 1080aeed3e9SJustin Hibbits do { \ 109852ba100SJustin Hibbits dcbz((char *)p + 32); \ 1100aeed3e9SJustin Hibbits dcbz(p); \ 1110aeed3e9SJustin Hibbits } while (0) 1120aeed3e9SJustin Hibbits #define dcbf_64(p) \ 1130aeed3e9SJustin Hibbits do { \ 114852ba100SJustin Hibbits dcbf((char *)p + 32); \ 1150aeed3e9SJustin Hibbits dcbf(p); \ 1160aeed3e9SJustin Hibbits } while (0) 1170aeed3e9SJustin Hibbits /* Commonly used combo */ 1180aeed3e9SJustin Hibbits #define dcbit_ro(p) \ 1190aeed3e9SJustin Hibbits do { \ 1200aeed3e9SJustin Hibbits dcbi(p); \ 121852ba100SJustin Hibbits dcbi((char *)p + 32); \ 1220aeed3e9SJustin Hibbits dcbt_ro(p); \ 123852ba100SJustin Hibbits dcbt_ro((char *)p + 32); \ 1240aeed3e9SJustin Hibbits } while (0) 1250aeed3e9SJustin Hibbits 1260aeed3e9SJustin Hibbits #endif /* CORE_E500MC */ 1270aeed3e9SJustin Hibbits 1280aeed3e9SJustin Hibbits #define dcbi(p) dcbf(p) 1290aeed3e9SJustin Hibbits 1300aeed3e9SJustin Hibbits struct bm_addr { 1310aeed3e9SJustin Hibbits void *addr_ce; /* cache-enabled */ 1320aeed3e9SJustin Hibbits void *addr_ci; /* cache-inhibited */ 1330aeed3e9SJustin Hibbits }; 1340aeed3e9SJustin Hibbits 1350aeed3e9SJustin Hibbits /* RCR state */ 1360aeed3e9SJustin Hibbits struct bm_rcr { 1370aeed3e9SJustin Hibbits struct bm_rcr_entry *ring, *cursor; 1380aeed3e9SJustin Hibbits uint8_t ci, available, ithresh, vbit; 1390aeed3e9SJustin Hibbits #ifdef BM_CHECKING 1400aeed3e9SJustin Hibbits uint32_t busy; 1410aeed3e9SJustin Hibbits e_BmPortalProduceMode pmode; 1420aeed3e9SJustin Hibbits e_BmPortalRcrConsumeMode cmode; 1430aeed3e9SJustin Hibbits #endif /* BM_CHECKING */ 1440aeed3e9SJustin Hibbits }; 1450aeed3e9SJustin Hibbits 1460aeed3e9SJustin Hibbits /* MC state */ 1470aeed3e9SJustin Hibbits struct bm_mc { 1480aeed3e9SJustin Hibbits struct bm_mc_command *cr; 1490aeed3e9SJustin Hibbits struct bm_mc_result *rr; 1500aeed3e9SJustin Hibbits uint8_t rridx, vbit; 1510aeed3e9SJustin Hibbits #ifdef BM_CHECKING 1520aeed3e9SJustin Hibbits enum { 1530aeed3e9SJustin Hibbits /* Can only be _mc_start()ed */ 1540aeed3e9SJustin Hibbits mc_idle, 1550aeed3e9SJustin Hibbits /* Can only be _mc_commit()ed or _mc_abort()ed */ 1560aeed3e9SJustin Hibbits mc_user, 1570aeed3e9SJustin Hibbits /* Can only be _mc_retry()ed */ 1580aeed3e9SJustin Hibbits mc_hw 1590aeed3e9SJustin Hibbits } state; 1600aeed3e9SJustin Hibbits #endif /* BM_CHECKING */ 1610aeed3e9SJustin Hibbits }; 1620aeed3e9SJustin Hibbits 1630aeed3e9SJustin Hibbits /********************/ 1640aeed3e9SJustin Hibbits /* Portal structure */ 1650aeed3e9SJustin Hibbits /********************/ 1660aeed3e9SJustin Hibbits 1670aeed3e9SJustin Hibbits struct bm_portal { 1680aeed3e9SJustin Hibbits struct bm_addr addr; 1690aeed3e9SJustin Hibbits struct bm_rcr rcr; 1700aeed3e9SJustin Hibbits struct bm_mc mc; 1710aeed3e9SJustin Hibbits }; 1720aeed3e9SJustin Hibbits 1730aeed3e9SJustin Hibbits 1740aeed3e9SJustin Hibbits #endif /* __BMAN_PRIV_H */ 175