SuperH Interfaces Guide Paul Mundt
lethal@linux-sh.org
2008-2010 Paul Mundt 2008-2010 Renesas Technology Corp. 2010 Renesas Electronics Corp. This documentation 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 For more details see the file COPYING in the source distribution of Linux.
Memory Management SH-4 Store Queue API LINUX Kernel Hackers Manual July 2017 sq_flush_range 9 4.1.27 sq_flush_range Flush (prefetch) a specific SQ range Synopsis void sq_flush_range unsigned long start unsigned int len Arguments start the store queue address to start flushing from len the length to flush Description Flushes the store queue cache from start to start + len in a linear fashion. LINUX Kernel Hackers Manual July 2017 sq_remap 9 4.1.27 sq_remap Map a physical address through the Store Queues Synopsis unsigned long sq_remap unsigned long phys unsigned int size const char * name pgprot_t prot Arguments phys Physical address of mapping. size Length of mapping. name User invoking mapping. prot Protection bits. Description Remaps the physical address phys through the next available store queue address of size length. name is logged at boot time as well as through the sysfs interface. LINUX Kernel Hackers Manual July 2017 sq_unmap 9 4.1.27 sq_unmap Unmap a Store Queue allocation Synopsis void sq_unmap unsigned long vaddr Arguments vaddr Pre-allocated Store Queue mapping. Description Unmaps the store queue allocation map that was previously created by sq_remap. Also frees up the pte that was previously inserted into the kernel page table and discards the UTLB translation. SH-5 TLB Interfaces LINUX Kernel Hackers Manual July 2017 sh64_tlb_init 9 4.1.27 sh64_tlb_init Perform initial setup for the DTLB and ITLB. Synopsis int sh64_tlb_init void Arguments void no arguments LINUX Kernel Hackers Manual July 2017 sh64_next_free_dtlb_entry 9 4.1.27 sh64_next_free_dtlb_entry Find the next available DTLB entry Synopsis unsigned long long sh64_next_free_dtlb_entry void Arguments void no arguments LINUX Kernel Hackers Manual July 2017 sh64_get_wired_dtlb_entry 9 4.1.27 sh64_get_wired_dtlb_entry Allocate a wired (locked-in) entry in the DTLB Synopsis unsigned long long sh64_get_wired_dtlb_entry void Arguments void no arguments LINUX Kernel Hackers Manual July 2017 sh64_put_wired_dtlb_entry 9 4.1.27 sh64_put_wired_dtlb_entry Free a wired (locked-in) entry in the DTLB. Synopsis int sh64_put_wired_dtlb_entry unsigned long long entry Arguments entry Address of TLB slot. Description Works like a stack, last one to allocate must be first one to free. LINUX Kernel Hackers Manual July 2017 sh64_setup_tlb_slot 9 4.1.27 sh64_setup_tlb_slot Load up a translation in a wired slot. Synopsis void sh64_setup_tlb_slot unsigned long long config_addr unsigned long eaddr unsigned long asid unsigned long paddr Arguments config_addr Address of TLB slot. eaddr Virtual address. asid Address Space Identifier. paddr Physical address. Description Load up a virtual<->physical translation for eaddr<->paddr in the pre-allocated TLB slot config_addr (see sh64_get_wired_dtlb_entry). LINUX Kernel Hackers Manual July 2017 sh64_teardown_tlb_slot 9 4.1.27 sh64_teardown_tlb_slot Teardown a translation. Synopsis void sh64_teardown_tlb_slot unsigned long long config_addr Arguments config_addr Address of TLB slot. Description Teardown any existing mapping in the TLB slot config_addr. LINUX Kernel Hackers Manual July 2017 for_each_dtlb_entry 9 4.1.27 for_each_dtlb_entry Iterate over free (non-wired) DTLB entries Synopsis for_each_dtlb_entry tlb Arguments tlb TLB entry LINUX Kernel Hackers Manual July 2017 for_each_itlb_entry 9 4.1.27 for_each_itlb_entry Iterate over free (non-wired) ITLB entries Synopsis for_each_itlb_entry tlb Arguments tlb TLB entry LINUX Kernel Hackers Manual July 2017 __flush_tlb_slot 9 4.1.27 __flush_tlb_slot Flushes TLB slot slot. Synopsis void __flush_tlb_slot unsigned long long slot Arguments slot Address of TLB slot. Machine Specific Interfaces mach-dreamcast LINUX Kernel Hackers Manual July 2017 aica_rtc_gettimeofday 9 4.1.27 aica_rtc_gettimeofday Get the time from the AICA RTC Synopsis void aica_rtc_gettimeofday struct timespec * ts Arguments ts pointer to resulting timespec Description Grabs the current RTC seconds counter and adjusts it to the Unix Epoch. LINUX Kernel Hackers Manual July 2017 aica_rtc_settimeofday 9 4.1.27 aica_rtc_settimeofday Set the AICA RTC to the current time Synopsis int aica_rtc_settimeofday const time_t secs Arguments secs contains the time_t to set Description Adjusts the given tv to the AICA Epoch and sets the RTC seconds counter. mach-x3proto LINUX Kernel Hackers Manual July 2017 ilsel_enable 9 4.1.27 ilsel_enable Enable an ILSEL set. Synopsis int ilsel_enable ilsel_source_t set Arguments set ILSEL source (see ilsel_source_t enum in include/asm-sh/ilsel.h). Description Enables a given non-aliased ILSEL source (<= ILSEL_KEY) at the highest available interrupt level. Callers should take care to order callsites noting descending interrupt levels. Aliasing FPGA and external board IRQs need to use ilsel_enable_fixed. The return value is an IRQ number that can later be taken down with ilsel_disable. LINUX Kernel Hackers Manual July 2017 ilsel_enable_fixed 9 4.1.27 ilsel_enable_fixed Enable an ILSEL set at a fixed interrupt level Synopsis int ilsel_enable_fixed ilsel_source_t set unsigned int level Arguments set ILSEL source (see ilsel_source_t enum in include/asm-sh/ilsel.h). level Interrupt level (1 - 15) Description Enables a given ILSEL source at a fixed interrupt level. Necessary both for level reservation as well as for aliased sources that only exist on special ILSEL#s. Returns an IRQ number (as ilsel_enable). LINUX Kernel Hackers Manual July 2017 ilsel_disable 9 4.1.27 ilsel_disable Disable an ILSEL set Synopsis void ilsel_disable unsigned int irq Arguments irq Bit position for ILSEL set value (retval from enable routines) Description Disable a previously enabled ILSEL set. Busses SuperHyway LINUX Kernel Hackers Manual July 2017 superhyway_add_device 9 4.1.27 superhyway_add_device Add a SuperHyway module Synopsis int superhyway_add_device unsigned long base struct superhyway_device * sdev struct superhyway_bus * bus Arguments base Physical address where module is mapped. sdev SuperHyway device to add, or NULL to allocate a new one. bus Bus where SuperHyway module resides. Description This is responsible for adding a new SuperHyway module. This sets up a new struct superhyway_device for the module being added if sdev == NULL. Devices are initially added in the order that they are scanned (from the top-down of the memory map), and are assigned an ID based on the order that they are added. Any manual addition of a module will thus get the ID after the devices already discovered regardless of where it resides in memory. Further work can and should be done in superhyway_scan_bus, to be sure that any new modules are properly discovered and subsequently registered. LINUX Kernel Hackers Manual July 2017 superhyway_register_driver 9 4.1.27 superhyway_register_driver Register a new SuperHyway driver Synopsis int superhyway_register_driver struct superhyway_driver * drv Arguments drv SuperHyway driver to register. Description This registers the passed in drv. Any devices matching the id table will automatically be populated and handed off to the driver's specified probe routine. LINUX Kernel Hackers Manual July 2017 superhyway_unregister_driver 9 4.1.27 superhyway_unregister_driver Unregister a SuperHyway driver Synopsis void superhyway_unregister_driver struct superhyway_driver * drv Arguments drv SuperHyway driver to unregister. Description This cleans up after superhyway_register_driver, and should be invoked in the exit path of any module drivers. Maple LINUX Kernel Hackers Manual July 2017 maple_driver_register 9 4.1.27 maple_driver_register register a maple driver Synopsis int maple_driver_register struct maple_driver * drv Arguments drv maple driver to be registered. Description Registers the passed in drv, while updating the bus type. Devices with matching function IDs will be automatically probed. LINUX Kernel Hackers Manual July 2017 maple_driver_unregister 9 4.1.27 maple_driver_unregister unregister a maple driver. Synopsis void maple_driver_unregister struct maple_driver * drv Arguments drv maple driver to unregister. Description Cleans up after maple_driver_register. To be invoked in the exit path of any module drivers. LINUX Kernel Hackers Manual July 2017 maple_getcond_callback 9 4.1.27 maple_getcond_callback setup handling MAPLE_COMMAND_GETCOND Synopsis void maple_getcond_callback struct maple_device * dev void (*callback) struct mapleq *mq unsigned long interval unsigned long function Arguments dev device responding callback handler callback interval interval in jiffies between callbacks function the function code for the device LINUX Kernel Hackers Manual July 2017 maple_add_packet 9 4.1.27 maple_add_packet add a single instruction to the maple bus queue Synopsis int maple_add_packet struct maple_device * mdev u32 function u32 command size_t length void * data Arguments mdev maple device function function on device being queried command maple command to add length length of command string (in 32 bit words) data remainder of command string