linux/drivers/video/arcfb.c
<<
on v.6./spa> .6./form .6.a on v.6 href="../linux+v3v2.1/drivers/video/arcfb.c">on v.6.img src="../.static/gfx/right.png" alt=">>">on./spa> on.spa> class="lxr_search">on v="+search" method="post" onsubmit="return do_search(this);">on v.6.input typn> hidden" namn> navtarget" ption> ">on v.6.input typn> text" namn> search" id> search">on v.6.butt submit">Search on.spa> class="lxr_prefs" .6.a href="+prefs?return=drivers/video/arcfb.c"on v.6 onclick="return ajax_prefs();">on v.6Prefs .6./a>on./spa> v.6 6./div v.6 6.form ac >="ajax+*" method="post" onsubmit="return false;">on.input typn> hidden" namn> ajax_lookup" id> ajax_lookup" ption> ">o v.6 6./form o v.6 6.div class="headingbott
search_results" class="search_results" . v.6 6./div .div id> content"> .div id> file_contents"
d3/b5/c0111b5d83422075ecf0bb960b0583379d53_3/0"

L1" class="line" namn>
L1">6 61./a>.spa> class="comment">/*./spa>
 
L2" class="line" namn>
L2">6 62./a>.spa> class="comment"> * linux/drivers/video/arcfb.c -- FB driver for Arc monochrome LCD board./spa>
 
L3" class="line" namn>
L3">6 63./a>.spa> class="comment"> *./spa>
 
L4" class="line" namn>
L4">6 64./a>.spa> class="comment"> * Copyright (C) 2005, Jaya Kumar <jayalk@intworks.biz>./spa>
 
L5" class="line" namn>
L5">6 65./a>.spa> class="comment"> *./spa>
 
L6" class="line" namn>
L6">6 66./a>.spa> class="comment"> * This file is subject to the terms and condi	  >s of the GNU General Public./spa>
 
L7" class="line" namn>
L7">6 67./a>.spa> class="comment"> * License. See the file COPYING in the main directory of this archive for./spa>
 
L8" class="line" namn>
L8">6 68./a>.spa> class="comment"> * more details../spa>
 
L9" class="line" namn>
L9">6 69./a>.spa> class="comment"> *./spa>
 
L10" class="line" namn>
L10">6 .10"a>.spa> class="comment"> * Layout is based on skelets and Geert Uytterhoeven../spa>
 
L11" class="line" namn>
L11">6 11./a>.spa> class="comment"> *./spa>
 
L12" class="line" namn>
L12">6 12./a>.spa> class="comment"> * This driver was written to be used with the Arc LCD board. Arc uses a./spa>
 
L13" class="line" namn>
L13">6 13./a>.spa> class="comment"> * set of KS108 chips that control individual 64x64 LCD matrices. The board./spa>
 
L14" class="line" namn>
L14">6 14./a>.spa> class="comment"> * ca> be pa>eled in a ptriety of setups such as 2x1=128x64, 4x4=256x256 and./spa>
 
L15" class="line" namn>
L15">6 15./a>.spa> class="comment"> * so on. The interface between the board and the host is TTL based GPIO. The./spa>
 
L16" class="line" namn>
L16">6 16./a>.spa> class="comment"> * GPIO requirements are 8 writable data lines and 4+n lines for control. On a./spa>
 
L17" class="line" namn>
L17">6 17./a>.spa> class="comment"> * GPIO-less system, the board ca> be tested by connecting the respective sigs./spa>
 
L18" class="line" namn>
L18">6 18./a>.spa> class="comment"> * up to a parallel port connector. The driver requires the IO addresses for./spa>
 
L19" class="line" namn>
L19">6 19./a>.spa> class="comment"> * data and control GPIO at load time. It is unable to probe for the./spa>
 
L20" class="line" namn>
L20">6 210"a>.spa> class="comment"> * existence of the LCD so it must be told at load time whether it should./spa>
 
L21" class="line" namn>
L21">6 21./a>.spa> class="comment"> * be enabled or not../spa>
 
L22" class="line" namn>
L22">6 22./a>.spa> class="comment"> *./spa>
 
L23" class="line" namn>
L23">6 23./a>.spa> class="comment"> * Todo:./spa>
 
L24" class="line" namn>
L24">6 24./a>.spa> class="comment"> * - testing with 4x4./spa>
 
L25" class="line" namn>
L25">6 25./a>.spa> class="comment"> * - testing with interrupt hw./spa>
 
L26" class="line" namn>
L26">6 26./a>.spa> class="comment"> *./spa>
 
L27" class="line" namn>
L27">6 27./a>.spa> class="comment"> * General notes:./spa>
 
L28" class="line" namn>
L28">6 28./a>.spa> class="comment"> * - User must set tuhold. It's in microseconds. According to the 108 spec,./spa>
 
L29" class="line" namn>
L29">6 29./a>.spa> class="comment"> *   the hold time is supposed to be at least 1 microsecond../spa>
 
L30" class="line" namn>
L30">6 310"a>.spa> class="comment"> * - User must set num_cols=x num_rows=y, eg: x=2 mea>s 128./spa>
 
L31" class="line" namn>
L31">6 31./a>.spa> class="comment"> * - User must set arcfb_enable=1 to enable it./spa>
 
L32" class="line" namn>
L32">6 32./a>.spa> class="comment"> * - User must set dio_addr=0xIOADDR cio_addr=0xIOADDR./spa>
 
L33" class="line" namn>
L33">6 33./a>.spa> class="comment"> *./spa>
 
L34" class="line" namn>
L34">6 34./a>.spa> class="comment"> */./spa>
 
L35" class="line" namn>
L35">6 35./a> 
L36" class="line" namn>
L36">6 36./a>#include <linux/module.h./a>> 
L37" class="line" namn>
L37">6 37./a>#include <linux/ker>el.h./a>> 
L38" class="line" namn>
L38">6 38./a>#include <linux/errno.h./a>> 
L39" class="line" namn>
L39">6 39./a>#include <linux/string.h./a>> 
L40" class="line" namn>
L40">6 40./a>#include <linux/mm.h./a>> 
L41" class="line" namn>
L41">6 41./a>#include <linux/vmalloc.h./a>> 
L42" class="line" namn>
L42">6 42./a>#include <linux/delay.h./a>> 
L43" class="line" namn>
L43">6 43./a>#include <linux/interrupt.h./a>> 
L44" class="line" namn>
L44">6 44./a>#include <linux/fb.h./a>> 
L45" class="line" namn>
L45">6 45./a>#include <linux/init.h./a>> 
L46" class="line" namn>
L46">6 46./a>#include <linux/arcfb.h./a>> 
L47" class="line" namn>
L47">6 47./a>#include <linux/platform_device.h./a>> 
L48" class="line" namn>
L48">6 48./a> 
L49" class="line" namn>
L49">6 49./a>#include <linux/uaccess.h./a>> 
L50" class="line" namn>
L50">6 50./a> 
L51" class="line" namn>
L51">6 51./a>#define6.a href="+code=floor8" class="sref">floor8./a>(.a href="+code=a" class="sref">a./a>) (.a href="+code=a" class="sref">a./a>&(~0x07)) 
L52" class="line" namn>
L52">6 52./a>#define6.a href="+code=floorXres" class="sref">floorXres./a>(.a href="+code=a" class="sref">a./a>,.a href="+code=xres" class="sref">xres./a>) (.a href="+code=a" class="sref">a./a>&(~(.a href="+code=xres" class="sref">xres./a> - 1))) 
L53" class="line" namn>
L53">6 53./a>#define6.a href="+code=iceil8" class="sref">iceil8./a>(.a href="+code=a" class="sref">a./a>) (((int)((.a href="+code=a" class="sref">a./a>+7)/8))*8) 
L54" class="line" namn>
L54">6 54./a>#define6.a href="+code=ceil64" class="sref">ceil64./a>(.a href="+code=a" class="sref">a./a>) (.a href="+code=a" class="sref">a./a>|0x3F) 
L55" class="line" namn>
L55">6 55./a>#define6.a href="+code=ceilXres" class="sref">ceilXres./a>(.a href="+code=a" class="sref">a./a>,.a href="+code=xres" class="sref">xres./a>) (.a href="+code=a" class="sref">a./a>|(.a href="+code=xres" class="sref">xres./a> - 1)) 
L56" class="line" namn>
L56">6 56./a> 
L57" class="line" namn>
L57">6 57./a>.spa> class="comment">/* ks108 chipset specific defines and code */./spa>
 
L58" class="line" namn>
L58">6 58./a> 
L59" class="line" namn>
L59">6 59./a>#define6.a href="+code=KS_SET_DPY_START_LINE" class="sref">KS_SET_DPY_START_LINE./a>   0xC0 
L60" class="line" namn>
L60">6 60./a>#define6.a href="+code=KS_SET_PAGE_NUM" class="sref">KS_SET_PAGE_NUM./a>         0xB8 
L61" class="line" namn>
L61">6 61./a>#define6.a href="+code=KS_SET_X" class="sref">KS_SET_X./a>                0x40 
L62" class="line" namn>
L62">6 62./a>#define6.a href="+code=KS_CEHI" class="sref">KS_CEHI./a>                 0x01 
L63" class="line" namn>
L63">6 63./a>#define6.a href="+code=KS_CELO" class="sref">KS_CELO./a>                 0x00 
L64" class="line" namn>
L64">6 64./a>#define6.a href="+code=KS_SEL_CMD" class="sref">KS_SEL_CMD./a>              0x08 
L65" class="line" namn>
L65">6 65./a>#define6.a href="+code=KS_SEL_DATA" class="sref">KS_SEL_DATA./a>             0x00 
L66" class="line" namn>
L66">6 66./a>#define6.a href="+code=KS_DPY_ON" class="sref">KS_DPY_ON./a>               0x3F 
L67" class="line" namn>
L67">6 67./a>#define6.a href="+code=KS_DPY_OFF" class="sref">KS_DPY_OFF./a>              0x3E 
L68" class="line" namn>
L68">6 68./a>#define6.a href="+code=KS_INTACK" class="sref">KS_INTACK./a>               0x40 
L69" class="line" namn>
L69">6 69./a>#define6.a href="+code=KS_CLRINT" class="sref">KS_CLRINT./a>               0x02 
L70" class="line" namn>
L70">6 70./a> 
L71" class="line" namn>
L71">6 71./a>struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> { 
L72" class="line" namn>
L72">6 72./a>        unsigned long6.a href="+code=dio_addr" class="sref">dio_addr./a>; 
L73" class="line" namn>
L73">6 73./a>        unsigned long6.a href="+code=cio_addr" class="sref">cio_addr./a>; 
L74" class="line" namn>
L74">6 74./a>        unsigned long6.a href="+code=c2io_addr" class="sref">c2io_addr./a>; 
L75" class="line" namn>
L75">6 75./a>        .a href="+code=atomic_t" class="sref">atomic_t./a> .a href="+code=ref_count" class="sref">ref_count./a>; 
L76" class="line" namn>
L76">6 76./a>        unsigned char6.a href="+code=cslut" class="sref">cslut./a>[9]; 
L77" class="line" namn>
L77">6 77./a>        struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>; 
L78" class="line" namn>
L78">6 78./a>        unsigned int6.a href="+code=irq" class="sref">irq./a>; 
L79" class="line" namn>
L79">6 79./a>        .a href="+code=spinlock_t" class="sref">spinlock_t./a> .a href="+code=lock" class="sref">lock./a>; 
L80" class="line" namn>
L80">6 80./a>}; 
L81" class="line" namn>
L81">6 81./a> 
L82" class="line" namn>
L82">6 82./a>static struct6.a href="+code=fb_fix_screeninfo" class="sref">fb_fix_screeninfo./a> .a href="+code=arcfb_fix" class="sref">arcfb_fix./a> .a href="+code=__devinitdata" class="sref">__devinitdata./a> = { 
L83" class="line" namn>
L83">6 83./a>        ..a href="+code=id" class="sref">id./a> =           .spa> class="string">"arcfb"./spa>
, 
L84" class="line" namn>
L84">6 84./a>        ..a href="+code=typn" class="sref">typn./a> =         .a href="+code=FB_TYPE_PACKED_PIXELS" class="sref">FB_TYPE_PACKED_PIXELS./a>, 
L85" class="line" namn>
L85">6 85./a>        ..a href="+code=visual" class="sref">visual./a> =       .a href="+code=FB_VISUAL_MONO01" class="sref">FB_VISUAL_MONO01./a>, 
L86" class="line" namn>
L86">6 86./a>        ..a href="+code=xpa>step" class="sref">xpa>step./a> =     0, 
L87" class="line" namn>
L87">6 87./a>        ..a href="+code=ypa>step" class="sref">ypa>step./a> =     1, 
L88" class="line" namn>
L88">6 88./a>        ..a href="+code=ywrapstep" class="sref">ywrapstep./a> =    0, 
L89" class="line" namn>
L89">6 89./a>        ..a href="+code=accel" class="sref">accel./a> =        .a href="+code=FB_ACCEL_NONE" class="sref">FB_ACCEL_NONE./a>, 
L90" class="line" namn>
L90">6 90./a>}; 
L91" class="line" namn>
L91">6 91./a> 
L92" class="line" namn>
L92">6 92./a>static struct6.a href="+code=fb_var_screeninfo" class="sref">fb_var_screeninfo./a> .a href="+code=arcfb_var" class="sref">arcfb_var./a> .a href="+code=__devinitdata" class="sref">__devinitdata./a> = { 
L93" class="line" namn>
L93">6 93./a>        ..a href="+code=xres" class="sref">xres./a>           = 128, 
L94" class="line" namn>
L94">6 94./a>        ..a href="+code=yres" class="sref">yres./a>           = 64, 
L95" class="line" namn>
L95">6 95./a>        ..a href="+code=xres_virtual" class="sref">xres_virtual./a>   = 128, 
L96" class="line" namn>
L96">6 96./a>        ..a href="+code=yres_virtual" class="sref">yres_virtual./a>   = 64, 
L97" class="line" namn>
L97">6 97./a>        ..a href="+code=bits_per_pixel" class="sref">bits_per_pixel./a> = 1, 
L98" class="line" namn>
L98">6 98./a>        ..a href="+code=no>std" class="sref">no>std./a>         = 1, 
L99" class="line" namn>
L99">6 99./a>}; 
L100" class="line" namn>
L100">6100./a> 
L101" class="line" namn>
L101">6101./a>static unsigned long6.a href="+code=num_cols" class="sref">num_cols./a>; 
L102" class="line" namn>
L102">6102./a>static unsigned long6.a href="+code=num_rows" class="sref">num_rows./a>; 
L103" class="line" namn>
L103">6103./a>static unsigned long6.a href="+code=dio_addr" class="sref">dio_addr./a>; 
L104" class="line" namn>
L104">6104./a>static unsigned long6.a href="+code=cio_addr" class="sref">cio_addr./a>; 
L105" class="line" namn>
L105">6105./a>static unsigned long6.a href="+code=c2io_addr" class="sref">c2io_addr./a>; 
L106" class="line" namn>
L106">6106./a>static unsigned long6.a href="+code=splashval" class="sref">splashval./a>; 
L107" class="line" namn>
L107">6107./a>static unsigned long6.a href="+code=tuhold" class="sref">tuhold./a>; 
L108" class="line" namn>
L108">6108./a>static unsigned int6.a href="+code=nosplash" class="sref">nosplash./a>; 
L109" class="line" namn>
L109">6109./a>static unsigned int6.a href="+code=arcfb_enable" class="sref">arcfb_enable./a>; 
L110" class="line" namn>
L110">61.10"a>static unsigned int6.a href="+code=irq" class="sref">irq./a>; 
L111" class="line" namn>
L111">6111./a> 
L112" class="line" namn>
L112">6112./a>static .a href="+code=DECLARE_WAIT_QUEUE_HEAD" class="sref">DECLARE_WAIT_QUEUE_HEAD./a>(.a href="+code=arcfb_waitq" class="sref">arcfb_waitq./a>); 
L113" class="line" namn>
L113">6113./a> 
L114" class="line" namn>
L114">6114./a>static void .a href="+code=ks108_writeb_ctl" class="sref">ks108_writeb_ctl./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, 
L115" class="line" namn>
L115">6115./a>                                unsigned int6.a href="+code=chipindex" class="sref">chipindex./a>, unsigned char6.a href="+code=ption" class="sref">vtion./a>) 
L116" class="line" namn>
L116">6116./a>{ 
L117" class="line" namn>
L117">6117./a>        unsigned char6.a href="+code=chipselval" class="sref">chipselval./a> = .a href="+code=par" class="sref">par./a>->.a href="+code=cslut" class="sref">cslut./a>[.a href="+code=chipindex" class="sref">chipindex./a>]; 
L118" class="line" namn>
L118">6118./a> 
L119" class="line" namn>
L119">6119./a>        .a href="+code=outb" class="sref">outb./a>(.a href="+code=chipselval" class="sref">chipselval./a>|.a href="+code=KS_CEHI" class="sref">KS_CEHI./a>|.a href="+code=KS_SEL_CMD" class="sref">KS_SEL_CMD./a>, .a href="+code=par" class="sref">par./a>->.a href="+code=cio_addr" class="sref">cio_addr./a>); 
L120" class="line" namn>
L120">61210"a>        .a href="+code=outb" class="sref">outb./a>(.a href="+code=ption" class="sref">vtion./a>, .a href="+code=par" class="sref">par./a>->.a href="+code=dio_addr" class="sref">dio_addr./a>); 
L121" class="line" namn>
L121">6121./a>        .a href="+code=udelay" class="sref">udelay./a>(.a href="+code=tuhold" class="sref">tuhold./a>); 
L122" class="line" namn>
L122">6122./a>        .a href="+code=outb" class="sref">outb./a>(.a href="+code=chipselval" class="sref">chipselval./a>|.a href="+code=KS_CELO" class="sref">KS_CELO./a>|.a href="+code=KS_SEL_CMD" class="sref">KS_SEL_CMD./a>, .a href="+code=par" class="sref">par./a>->.a href="+code=cio_addr" class="sref">cio_addr./a>); 
L123" class="line" namn>
L123">6123./a>} 
L124" class="line" namn>
L124">6124./a> 
L125" class="line" namn>
L125">6125./a>static void .a href="+code=ks108_writeb_mainctl" class="sref">ks108_writeb_mainctl./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, unsigned char6.a href="+code=ption" class="sref">vtion./a>) 
L126" class="line" namn>
L126">6126./a>{ 
L127" class="line" namn>
L127">6127./a> 
L128" class="line" namn>
L128">61280"a>        .a href="+code=outb" class="sref">outb./a>(.a href="+code=ption" class="sref">vtion./a>, .a href="+code=par" class="sref">par./a>->.a href="+code=cio_addr" class="sref">cio_addr./a>); 
L129" class="line" namn>
L129">6129./a>        .a href="+code=udelay" class="sref">udelay./a>(.a href="+code=tuhold" class="sref">tuhold./a>); 
L130" class="line" namn>
L130">61310"a>} 
L131" class="line" namn>
L131">6131./a> 
L132" class="line" namn>
L132">6132./a>static unsigned char6.a href="+code=ks108_readb_ctl2" class="sref">ks108_readb_ctl2./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>) 
L133" class="line" namn>
L133">6133./a>{ 
L134" class="line" namn>
L134">6134./a>        return .a href="+code=inb" class="sref">inb./a>(.a href="+code=par" class="sref">par./a>->.a href="+code=c2io_addr" class="sref">c2io_addr./a>); 
L135" class="line" namn>
L135">6135./a>} 
L136" class="line" namn>
L136">6136./a> 
L137" class="line" namn>
L137">6137./a>static void .a href="+code=ks108_writeb_data" class="sref">ks108_writeb_data./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, 
L138" class="line" namn>
L138">61380"a>                                unsigned int6.a href="+code=chipindex" class="sref">chipindex./a>, unsigned char6.a href="+code=ption" class="sref">vtion./a>) 
L139" class="line" namn>
L139">6139./a>{ 
L140" class="line" namn>
L140">61410"a>        unsigned char6.a href="+code=chipselval" class="sref">chipselval./a> = .a href="+code=par" class="sref">par./a>->.a href="+code=cslut" class="sref">cslut./a>[.a href="+code=chipindex" class="sref">chipindex./a>]; 
L141" class="line" namn>
L141">6141./a> 
L142" class="line" namn>
L142">6142./a>        .a href="+code=outb" class="sref">outb./a>(.a href="+code=chipselval" class="sref">chipselval./a>|.a href="+code=KS_CEHI" class="sref">KS_CEHI./a>|.a href="+code=KS_SEL_DATA" class="sref">KS_SEL_DATA./a>, .a href="+code=par" class="sref">par./a>->.a href="+code=cio_addr" class="sref">cio_addr./a>); 
L143" class="line" namn>
L143">6143./a>        .a href="+code=outb" class="sref">outb./a>(.a href="+code=ption" class="sref">vtion./a>, .a href="+code=par" class="sref">par./a>->.a href="+code=dio_addr" class="sref">dio_addr./a>); 
L144" class="line" namn>
L144">6144./a>        .a href="+code=udelay" class="sref">udelay./a>(.a href="+code=tuhold" class="sref">tuhold./a>); 
L145" class="line" namn>
L145">6145./a>        .a href="+code=outb" class="sref">outb./a>(.a href="+code=chipselval" class="sref">chipselval./a>|.a href="+code=KS_CELO" class="sref">KS_CELO./a>|.a href="+code=KS_SEL_DATA" class="sref">KS_SEL_DATA./a>, .a href="+code=par" class="sref">par./a>->.a href="+code=cio_addr" class="sref">cio_addr./a>); 
L146" class="line" namn>
L146">6146./a>} 
L147" class="line" namn>
L147">6147./a> 
L148" class="line" namn>
L148">6148./a>static void .a href="+code=ks108_set_start_line" class="sref">ks108_set_start_line./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, 
L149" class="line" namn>
L149">6149./a>                                unsigned int6.a href="+code=chipindex" class="sref">chipindex./a>, unsigned char6.a href="+code=y" class="sref">y./a>) 
L150" class="line" namn>
L150">6150./a>{ 
L151" class="line" namn>
L151">6151./a>        .a href="+code=ks108_writeb_ctl" class="sref">ks108_writeb_ctl./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=KS_SET_DPY_START_LINE" class="sref">KS_SET_DPY_START_LINE./a>|.a href="+code=y" class="sref">y./a>); 
L152" class="line" namn>
L152">6152./a>} 
L153" class="line" namn>
L153">6153./a> 
L154" class="line" namn>
L154">6154./a>static void .a href="+code=ks108_set_yaddr" class="sref">ks108_set_yaddr./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, 
L155" class="line" namn>
L155">6155./a>                                unsigned int6.a href="+code=chipindex" class="sref">chipindex./a>, unsigned char6.a href="+code=y" class="sref">y./a>) 
L156" class="line" namn>
L156">6156./a>{ 
L157" class="line" namn>
L157">6157./a>        .a href="+code=ks108_writeb_ctl" class="sref">ks108_writeb_ctl./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=KS_SET_PAGE_NUM" class="sref">KS_SET_PAGE_NUM./a>|.a href="+code=y" class="sref">y./a>); 
L158" class="line" namn>
L158">6158./a>} 
L159" class="line" namn>
L159">6159./a> 
L160" class="line" namn>
L160">6160./a>static void .a href="+code=ks108_set_xaddr" class="sref">ks108_set_xaddr./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, 
L161" class="line" namn>
L161">6161./a>                                unsigned int6.a href="+code=chipindex" class="sref">chipindex./a>, unsigned char6.a href="+code=x" class="sref">x./a>) 
L162" class="line" namn>
L162">6162./a>{ 
L163" class="line" namn>
L163">6163./a>        .a href="+code=ks108_writeb_ctl" class="sref">ks108_writeb_ctl./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=KS_SET_X" class="sref">KS_SET_X./a>|.a href="+code=x" class="sref">x./a>); 
L164" class="line" namn>
L164">6164./a>} 
L165" class="line" namn>
L165">6165./a> 
L166" class="line" namn>
L166">6166./a>static void .a href="+code=ks108_clear_lcd" class="sref">ks108_clear_lcd./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, unsigned int6.a href="+code=chipindex" class="sref">chipindex./a>) 
L167" class="line" namn>
L167">6167./a>{ 
L168" class="line" namn>
L168">61680"a>        int6.a href="+code=i" class="sref">i./a>,.a href="+code=j" class="sref">j./a>; 
L169" class="line" namn>
L169">6169./a> 
L170" class="line" namn>
L170">61710"a>        for (.a href="+code=i" class="sref">i./a> = 0;6.a href="+code=i" class="sref">i./a> <= 8;6.a href="+code=i" class="sref">i./a>++) { 
L171" class="line" namn>
L171">6171./a>                .a href="+code=ks108_set_yaddr" class="sref">ks108_set_yaddr./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=i" class="sref">i./a>); 
L172" class="line" namn>
L172">6172./a>                .a href="+code=ks108_set_xaddr" class="sref">ks108_set_xaddr./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, 0); 
L173" class="line" namn>
L173">6173./a>                for (.a href="+code=j" class="sref">j./a> = 0;6.a href="+code=j" class="sref">j./a> < 64;6.a href="+code=j" class="sref">j./a>++) { 
L174" class="line" namn>
L174">6174./a>                        .a href="+code=ks108_writeb_data" class="sref">ks108_writeb_data./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, 
L175" class="line" namn>
L175">6175./a>                                (unsigned char)6.a href="+code=splashval" class="sref">splashval./a>); 
L176" class="line" namn>
L176">6176./a>                } 
L177" class="line" namn>
L177">6177./a>        } 
L178" class="line" namn>
L178">6178./a>} 
L179" class="line" namn>
L179">6179./a> 
L180" class="line" namn>
L180">61810"a>.spa> class="comment">/* main arcfb func	  >s */./spa>
 
L181" class="line" namn>
L181">6181./a> 
L182" class="line" namn>
L182">6182./a>static int6.a href="+code=arcfb_open" class="sref">arcfb_open./a>(struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>, int6.a href="+code=user" class="sref">user./a>) 
L183" class="line" namn>
L183">6183./a>{ 
L184" class="line" namn>
L184">6184./a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L185" class="line" namn>
L185">6185./a> 
L186" class="line" namn>
L186">6186./a>        .a href="+code=atomic_inc" class="sref">atomic_inc./a>(&.a href="+code=par" class="sref">par./a>->.a href="+code=ref_count" class="sref">ref_count./a>); 
L187" class="line" namn>
L187">6187./a>        return 0; 
L188" class="line" namn>
L188">6188./a>} 
L189" class="line" namn>
L189">6189./a> 
L190" class="line" namn>
L190">6190./a>static int6.a href="+code=arcfb_release" class="sref">arcfb_release./a>(struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>, int6.a href="+code=user" class="sref">user./a>) 
L191" class="line" namn>
L191">6191./a>{ 
L192" class="line" namn>
L192">6192./a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L193" class="line" namn>
L193">6193./a>        int6.a href="+code=count" class="sref">count./a> = .a href="+code=atomic_read" class="sref">atomic_read./a>(&.a href="+code=par" class="sref">par./a>->.a href="+code=ref_count" class="sref">ref_count./a>); 
L194" class="line" namn>
L194">6194./a> 
L195" class="line" namn>
L195">6195./a>        if (!.a href="+code=count" class="sref">count./a>) 
L196" class="line" namn>
L196">6196./a>                return -.a href="+code=EINVAL" class="sref">EINVAL./a>; 
L197" class="line" namn>
L197">6197./a>        .a href="+code=atomic_dec" class="sref">atomic_dec./a>(&.a href="+code=par" class="sref">par./a>->.a href="+code=ref_count" class="sref">ref_count./a>); 
L198" class="line" namn>
L198">6198./a>        return 0; 
L199" class="line" namn>
L199">6199./a>} 
L200" class="line" namn>
L200">6200./a> 
L201" class="line" namn>
L201">6201./a>static int6.a href="+code=arcfb_pa>_display" class="sref">arcfb_pa>_display./a>(struct6.a href="+code=fb_var_screeninfo" class="sref">fb_var_screeninfo./a> *.a href="+code=var" class="sref">var./a>, 
L202" class="line" namn>
L202">6202./a>                                struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>) 
L203" class="line" namn>
L203">6203./a>{ 
L204" class="line" namn>
L204">6204./a>        int6.a href="+code=i" class="sref">i./a>; 
L205" class="line" namn>
L205">6205./a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L206" class="line" namn>
L206">6206./a> 
L207" class="line" namn>
L207">6207./a>        if ((.a href="+code=ptr" class="sref">var./a>->.a href="+code=vmode" class="sref">vmode./a> & .a href="+code=FB_VMODE_YWRAP" class="sref">FB_VMODE_YWRAP./a>) && (.a href="+code=ptr" class="sref">var./a>->.a href="+code=yoffset" class="sref">yoffset./a> < 64) 
L208" class="line" namn>
L208">62080"a>                && (.a href="+code=info" class="sref">info./a>->.a href="+code=ptr" class="sref">var./a>..a href="+code=yres" class="sref">yres./a> <= 64)) { 
L209" class="line" namn>
L209">6209./a>                for (.a href="+code=i" class="sref">i./a> = 0;6.a href="+code=i" class="sref">i./a> <6.a href="+code=num_cols" class="sref">num_cols./a>;6.a href="+code=i" class="sref">i./a>++) { 
L210" class="line" namn>
L210">6210./a>                        .a href="+code=ks108_set_start_line" class="sref">ks108_set_start_line./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=i" class="sref">i./a>,6.a href="+code=ptr" class="sref">var./a>->.a href="+code=yoffset" class="sref">yoffset./a>); 
L211" class="line" namn>
L211">6211./a>                } 
L212" class="line" namn>
L212">6212./a>                .a href="+code=info" class="sref">info./a>->.a href="+code=ptr" class="sref">var./a>..a href="+code=yoffset" class="sref">yoffset./a> = .a href="+code=ptr" class="sref">var./a>->.a href="+code=yoffset" class="sref">yoffset./a>; 
L213" class="line" namn>
L213">6213./a>                return 0; 
L214" class="line" namn>
L214">6214./a>        } 
L215" class="line" namn>
L215">6215./a> 
L216" class="line" namn>
L216">6216./a>        return -.a href="+code=EINVAL" class="sref">EINVAL./a>; 
L217" class="line" namn>
L217">6217./a>} 
L218" class="line" namn>
L218">6218./a> 
L219" class="line" namn>
L219">6219./a>static .a href="+code=irqreturn_t" class="sref">irqreturn_t./a> .a href="+code=arcfb_interrupt" class="sref">arcfb_interrupt./a>(int6.a href="+code=vec" class="sref">vec./a>, void *.a href="+code=dev_instance" class="sref">dev_instance./a>) 
L220" class="line" namn>
L220">6220./a>{ 
L221" class="line" namn>
L221">6221./a>        struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a> = .a href="+code=dev_instance" class="sref">dev_instance./a>; 
L222" class="line" namn>
L222">6222./a>        unsigned char6.a href="+code=ctl2status" class="sref">ctl2status./a>; 
L223" class="line" namn>
L223">6223./a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L224" class="line" namn>
L224">6224./a> 
L225" class="line" namn>
L225">6225./a>        .a href="+code=ctl2status" class="sref">ctl2status./a> = .a href="+code=ks108_readb_ctl2" class="sref">ks108_readb_ctl2./a>(.a href="+code=par" class="sref">par./a>); 
L226" class="line" namn>
L226">6226./a> 
L227" class="line" namn>
L227">6227./a>        if (!(.a href="+code=ctl2status" class="sref">ctl2status./a> & .a href="+code=KS_INTACK" class="sref">KS_INTACK./a>)) .spa> class="comment">/* not arc generated interrupt */./spa>
 
L228" class="line" namn>
L228">62280"a>                return .a href="+code=IRQ_NONE" class="sref">IRQ_NONE./a>; 
L229" class="line" namn>
L229">6229./a> 
L230" class="line" namn>
L230">62310"a>        .a href="+code=ks108_writeb_mainctl" class="sref">ks108_writeb_mainctl./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=KS_CLRINT" class="sref">KS_CLRINT./a>); 
L231" class="line" namn>
L231">6231./a> 
L232" class="line" namn>
L232">6232./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=par" class="sref">par./a>->.a href="+code=lock" class="sref">lock./a>); 
L233" class="line" namn>
L233">6233./a>        if (.a href="+code=waitqueue_active" class="sref">waitqueue_active./a>(&.a href="+code=arcfb_waitq" class="sref">arcfb_waitq./a>)) { 
L234" class="line" namn>
L234">6234./a>                .a href="+code=wake_up" class="sref">wake_up./a>(&.a href="+code=arcfb_waitq" class="sref">arcfb_waitq./a>); 
L235" class="line" namn>
L235">6235./a>        } 
L236" class="line" namn>
L236">6236./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=par" class="sref">par./a>->.a href="+code=lock" class="sref">lock./a>); 
L237" class="line" namn>
L237">6237./a> 
L238" class="line" namn>
L238">6238./a>        return .a href="+code=IRQ_HANDLED" class="sref">IRQ_HANDLED./a>; 
L239" class="line" namn>
L239">6239./a>} 
L240" class="line" namn>
L240">6240./a> 
L241" class="line" namn>
L241">6241./a>.spa> class="comment">/*./spa>
 
L242" class="line" namn>
L242">6242./a>.spa> class="comment"> * here we handle a specific page on the lcd. the complexity comes from./spa>
 
L243" class="line" namn>
L243">6243./a>.spa> class="comment"> * the fact that the fb is laidout in 8xX vertical columns. we extract./spa>
 
L244" class="line" namn>
L244">6244./a>.spa> class="comment"> * each write of 8 vertical pixels. then we shift out as we move along./spa>
 
L245" class="line" namn>
L245">6245./a>.spa> class="comment"> * X. That's what rightshift does. bitmask selects the desired input bit../spa>
 
L246" class="line" namn>
L246">6246./a>.spa> class="comment"> */./spa>
 
L247" class="line" namn>
L247">6247./a>static void .a href="+code=arcfb_lcd_update_page" class="sref">arcfb_lcd_update_page./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, unsigned int6.a href="+code=upper" class="sref">upper./a>, 
L248" class="line" namn>
L248">62480"a>                unsigned int6.a href="+code=left" class="sref">left./a>, unsigned int6.a href="+code=right" class="sref">right./a>, unsigned int6.a href="+code=distance" class="sref">distance./a>) 
L249" class="line" namn>
L249">6249./a>{ 
L250" class="line" namn>
L250">62510"a>        unsigned char6*.a href="+code=src" class="sref">src./a>; 
L251" class="line" namn>
L251">6251./a>        unsigned int6.a href="+code=xindex" class="sref">xindex./a>, .a href="+code=yindex" class="sref">yindex./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=linesize" class="sref">linesize./a>; 
L252" class="line" namn>
L252">6252./a>        int6.a href="+code=i" class="sref">i./a>; 
L253" class="line" namn>
L253">6253./a>        unsigned char6.a href="+code=pti" class="sref">val./a>; 
L254" class="line" namn>
L254">6254./a>        unsigned char6.a href="+code=bitmask" class="sref">bitmask./a>, .a href="+code=rightshift" class="sref">rightshift./a>; 
L255" class="line" namn>
L255">6255./a> 
L256" class="line" namn>
L256">6256./a>        .a href="+code=xindex" class="sref">xindex./a> = .a href="+code=left" class="sref">left./a> >> 6; 
L257" class="line" namn>
L257">6257./a>        .a href="+code=yindex" class="sref">yindex./a> = .a href="+code=upper" class="sref">upper./a> >> 6; 
L258" class="line" namn>
L258">62580"a>        .a href="+code=chipindex" class="sref">chipindex./a> = (.a href="+code=xindex" class="sref">xindex./a> + (.a href="+code=yindex" class="sref">yindex./a>*.a href="+code=num_cols" class="sref">num_cols./a>)); 
L259" class="line" namn>
L259">6259./a> 
L260" class="line" namn>
L260">62610"a>        .a href="+code=ks108_set_yaddr" class="sref">ks108_set_yaddr./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=upper" class="sref">upper./a>/8); 
L261" class="line" namn>
L261">6261./a> 
L262" class="line" namn>
L262">6262./a>        .a href="+code=linesize" class="sref">linesize./a> = .a href="+code=par" class="sref">par./a>->.a href="+code=info" class="sref">info./a>->.a href="+code=ptr" class="sref">var./a>..a href="+code=xres" class="sref">xres./a>/8; 
L263" class="line" namn>
L263">6263./a>        .a href="+code=src" class="sref">src./a> = (unsigned char6.a href="+code=__force" class="sref">__force./a> *)6.a href="+code=par" class="sref">par./a>->.a href="+code=info" class="sref">info./a>->.a href="+code=screen_base" class="sref">screen_base./a> + (.a href="+code=left" class="sref">left./a>/8) + 
L264" class="line" namn>
L264">6264./a>                (.a href="+code=upper" class="sref">upper./a> * .a href="+code=linesize" class="sref">linesize./a>); 
L265" class="line" namn>
L265">6265./a>        .a href="+code=ks108_set_xaddr" class="sref">ks108_set_xaddr./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=left" class="sref">left./a>); 
L266" class="line" namn>
L266">6266./a> 
L267" class="line" namn>
L267">6267./a>        .a href="+code=bitmask" class="sref">bitmask./a>=1; 
L268" class="line" namn>
L268">62680"a>        .a href="+code=rightshift" class="sref">rightshift./a>=0; 
L269" class="line" namn>
L269">6269./a>        while (.a href="+code=left" class="sref">left./a> <= .a href="+code=right" class="sref">right./a>) { 
L270" class="line" namn>
L270">6270./a>                .a href="+code=pti" class="sref">val./a> = 0; 
L271" class="line" namn>
L271">6271./a>                for (.a href="+code=i" class="sref">i./a> = 0;6.a href="+code=i" class="sref">i./a> <68;6.a href="+code=i" class="sref">i./a>++) { 
L272" class="line" namn>
L272">6272./a>                        if (6.a href="+code=i" class="sref">i./a> >6.a href="+code=rightshift" class="sref">rightshift./a>) { 
L273" class="line" namn>
L273">6273./a>                                .a href="+code=pti" class="sref">val./a> |= (*(.a href="+code=src" class="sref">src./a> + (.a href="+code=i" class="sref">i./a>*.a href="+code=linesize" class="sref">linesize./a>)) & .a href="+code=bitmask" class="sref">bitmask./a>) 
L274" class="line" namn>
L274">6274./a>                                                <<6(.a href="+code=i" class="sref">i./a> -6.a href="+code=rightshift" class="sref">rightshift./a>); 
L275" class="line" namn>
L275">6275./a>                        } else { 
L276" class="line" namn>
L276">6276./a>                                .a href="+code=pti" class="sref">val./a> |= (*(.a href="+code=src" class="sref">src./a> + (.a href="+code=i" class="sref">i./a>*.a href="+code=linesize" class="sref">linesize./a>)) & .a href="+code=bitmask" class="sref">bitmask./a>) 
L277" class="line" namn>
L277">6277./a>                                                 >> (.a href="+code=rightshift" class="sref">rightshift./a> -6.a href="+code=i" class="sref">i./a>); 
L278" class="line" namn>
L278">62780"a>                        } 
L279" class="line" namn>
L279">6279./a>                } 
L280" class="line" namn>
L280">6280./a>                .a href="+code=ks108_writeb_data" class="sref">ks108_writeb_data./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=chipindex" class="sref">chipindex./a>, .a href="+code=pti" class="sref">val./a>); 
L281" class="line" namn>
L281">6281./a>                .a href="+code=left" class="sref">left./a>++; 
L282" class="line" namn>
L282">6282./a>                if (.a href="+code=bitmask" class="sref">bitmask./a> == 0x80) { 
L283" class="line" namn>
L283">6283./a>                        .a href="+code=bitmask" class="sref">bitmask./a> = 1; 
L284" class="line" namn>
L284">6284./a>                        .a href="+code=src" class="sref">src./a>++; 
L285" class="line" namn>
L285">6285./a>                        .a href="+code=rightshift" class="sref">rightshift./a>=0; 
L286" class="line" namn>
L286">6286./a>                } else { 
L287" class="line" namn>
L287">6287./a>                        .a href="+code=bitmask" class="sref">bitmask./a> <<= 1; 
L288" class="line" namn>
L288">62880"a>                        .a href="+code=rightshift" class="sref">rightshift./a>++; 
L289" class="line" namn>
L289">6289./a>                } 
L290" class="line" namn>
L290">6290./a>        } 
L291" class="line" namn>
L291">6291./a>} 
L292" class="line" namn>
L292">6292./a> 
L293" class="line" namn>
L293">6293./a>.spa> class="comment">/*./spa>
 
L294" class="line" namn>
L294">6294./a>.spa> class="comment"> * here we handle the entire vertical page of the update. we write across./spa>
 
L295" class="line" namn>
L295">6295./a>.spa> class="comment"> * lcd chips. update_page uses the upper/left vtions to decide which./spa>
 
L296" class="line" namn>
L296">6296./a>.spa> class="comment"> * chip to select for the right. upper is needed for setting the page./spa>
 
L297" class="line" namn>
L297">6297./a>.spa> class="comment"> * desired for the write../spa>
 
L298" class="line" namn>
L298">6298./a>.spa> class="comment"> */./spa>
 
L299" class="line" namn>
L299">6299./a>static void .a href="+code=arcfb_lcd_update_vert" class="sref">arcfb_lcd_update_vert./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, unsigned int6.a href="+code=top" class="sref">top./a>, 
L300" class="line" namn>
L300">6300./a>                unsigned int6.a href="+code=bottom" class="sref">bottom./a>, unsigned int6.a href="+code=left" class="sref">left./a>, unsigned int6.a href="+code=right" class="sref">right./a>) 
L301" class="line" namn>
L301">6301./a>{ 
L302" class="line" namn>
L302">6302./a>        unsigned int6.a href="+code=distance" class="sref">distance./a>, .a href="+code=upper" class="sref">upper./a>, .a href="+code=lower" class="sref">lower./a>; 
L303" class="line" namn>
L303">6303./a> 
L304" class="line" namn>
L304">6304./a>        .a href="+code=distance" class="sref">distance./a> = (.a href="+code=bottom" class="sref">bottom./a> -6.a href="+code=top" class="sref">top./a>) + 1; 
L305" class="line" namn>
L305">6305./a>        .a href="+code=upper" class="sref">upper./a> = .a href="+code=top" class="sref">top./a>; 
L306" class="line" namn>
L306">6306./a>        .a href="+code=lower" class="sref">lower./a> = .a href="+code=top" class="sref">top./a> + 7; 
L307" class="line" namn>
L307">6307./a> 
L308" class="line" namn>
L308">63080"a>        while (.a href="+code=distance" class="sref">distance./a> > 0) { 
L309" class="line" namn>
L309">6309./a>                .a href="+code=distance" class="sref">distance./a> -= 8; 
L310" class="line" namn>
L310">6310./a>                .a href="+code=arcfb_lcd_update_page" class="sref">arcfb_lcd_update_page./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=upper" class="sref">upper./a>, .a href="+code=left" class="sref">left./a>, .a href="+code=right" class="sref">right./a>, 8); 
L311" class="line" namn>
L311">6311./a>                .a href="+code=upper" class="sref">upper./a> = .a href="+code=lower" class="sref">lower./a> + 1; 
L312" class="line" namn>
L312">6312./a>                .a href="+code=lower" class="sref">lower./a> = .a href="+code=upper" class="sref">upper./a> + 7; 
L313" class="line" namn>
L313">6313./a>        } 
L314" class="line" namn>
L314">6314./a>} 
L315" class="line" namn>
L315">6315./a> 
L316" class="line" namn>
L316">6316./a>.spa> class="comment">/*./spa>
 
L317" class="line" namn>
L317">6317./a>.spa> class="comment"> * here we handle horizontal blocks for the update. update_vert will./spa>
 
L318" class="line" namn>
L318">6318./a>.spa> class="comment"> * handle spa>ing multiple pages. we break out each horizontal./spa>
 
L319" class="line" namn>
L319">6319./a>.spa> class="comment"> * block in to individual blocks no taller tha> 64 pixels../spa>
 
L320" class="line" namn>
L320">63210"a>.spa> class="comment"> */./spa>
 
L321" class="line" namn>
L321">6321./a>static void .a href="+code=arcfb_lcd_update_horiz" class="sref">arcfb_lcd_update_horiz./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, unsigned int6.a href="+code=left" class="sref">left./a>, 
L322" class="line" namn>
L322">6322./a>                        unsigned int6.a href="+code=right" class="sref">right./a>, unsigned int6.a href="+code=top" class="sref">top./a>, unsigned int6.a href="+code=h" class="sref">h./a>) 
L323" class="line" namn>
L323">6323./a>{ 
L324" class="line" namn>
L324">6324./a>        unsigned int6.a href="+code=distance" class="sref">distance./a>, .a href="+code=upper" class="sref">upper./a>, .a href="+code=lower" class="sref">lower./a>; 
L325" class="line" namn>
L325">6325./a> 
L326" class="line" namn>
L326">6326./a>        .a href="+code=distance" class="sref">distance./a> = .a href="+code=h" class="sref">h./a>; 
L327" class="line" namn>
L327">6327./a>        .a href="+code=upper" class="sref">upper./a> = .a href="+code=floor8" class="sref">floor8./a>(.a href="+code=top" class="sref">top./a>); 
L328" class="line" namn>
L328">63280"a>        .a href="+code=lower" class="sref">lower./a> = .a href="+code=min" class="sref">min./a>(.a href="+code=upper" class="sref">upper./a> + .a href="+code=distance" class="sref">distance./a> - 1, .a href="+code=ceil64" class="sref">ceil64./a>(.a href="+code=upper" class="sref">upper./a>)); 
L329" class="line" namn>
L329">6329./a> 
L330" class="line" namn>
L330">63310"a>        while (.a href="+code=distance" class="sref">distance./a> > 0) { 
L331" class="line" namn>
L331">6331./a>                .a href="+code=distance" class="sref">distance./a> -= ((.a href="+code=lower" class="sref">lower./a> -6.a href="+code=upper" class="sref">upper./a>) + 1 ); 
L332" class="line" namn>
L332">6332./a>                .a href="+code=arcfb_lcd_update_vert" class="sref">arcfb_lcd_update_vert./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=upper" class="sref">upper./a>, .a href="+code=lower" class="sref">lower./a>, .a href="+code=left" class="sref">left./a>, .a href="+code=right" class="sref">right./a>); 
L333" class="line" namn>
L333">6333./a>                .a href="+code=upper" class="sref">upper./a> = .a href="+code=lower" class="sref">lower./a> + 1; 
L334" class="line" namn>
L334">6334./a>                .a href="+code=lower" class="sref">lower./a> = .a href="+code=min" class="sref">min./a>(.a href="+code=upper" class="sref">upper./a> + .a href="+code=distance" class="sref">distance./a> - 1, .a href="+code=ceil64" class="sref">ceil64./a>(.a href="+code=upper" class="sref">upper./a>)); 
L335" class="line" namn>
L335">6335./a>        } 
L336" class="line" namn>
L336">6336./a>} 
L337" class="line" namn>
L337">6337./a> 
L338" class="line" namn>
L338">6338./a>.spa> class="comment">/*./spa>
 
L339" class="line" namn>
L339">6339./a>.spa> class="comment"> * here we start the process of splitting out the fb update into./spa>
 
L340" class="line" namn>
L340">63410"a>.spa> class="comment"> * individual blocks of pixels. we end up splitting into 64x64 blocks./spa>
 
L341" class="line" namn>
L341">6341./a>.spa> class="comment"> * and finally down to 64x8 pages../spa>
 
L342" class="line" namn>
L342">6342./a>.spa> class="comment"> */./spa>
 
L343" class="line" namn>
L343">6343./a>static void .a href="+code=arcfb_lcd_update" class="sref">arcfb_lcd_update./a>(struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a>, unsigned int6.a href="+code=dx" class="sref">dx./a>, 
L344" class="line" namn>
L344">6344./a>                        unsigned int6.a href="+code=dy" class="sref">dy./a>, unsigned int6.a href="+code=w" class="sref">w./a>, unsigned int6.a href="+code=h" class="sref">h./a>) 
L345" class="line" namn>
L345">6345./a>{ 
L346" class="line" namn>
L346">6346./a>        unsigned int6.a href="+code=left" class="sref">left./a>, .a href="+code=right" class="sref">right./a>, .a href="+code=distance" class="sref">distance./a>, .a href="+code=y" class="sref">y./a>; 
L347" class="line" namn>
L347">6347./a> 
L348" class="line" namn>
L348">63480"a>        .spa> class="comment">/* align the request first */./spa>
 
L349" class="line" namn>
L349">6349./a>        .a href="+code=y" class="sref">y./a> = .a href="+code=floor8" class="sref">floor8./a>(.a href="+code=dy" class="sref">dy./a>); 
L350" class="line" namn>
L350">63510"a>        .a href="+code=h" class="sref">h./a> += .a href="+code=dy" class="sref">dy./a> -6.a href="+code=y" class="sref">y./a>; 
L351" class="line" namn>
L351">6351./a>        .a href="+code=h" class="sref">h./a> = .a href="+code=iceil8" class="sref">iceil8./a>(.a href="+code=h" class="sref">h./a>); 
L352" class="line" namn>
L352">6352./a> 
L353" class="line" namn>
L353">6353./a>        .a href="+code=distance" class="sref">distance./a> = .a href="+code=w" class="sref">w./a>; 
L354" class="line" namn>
L354">6354./a>        .a href="+code=left" class="sref">left./a> = .a href="+code=dx" class="sref">dx./a>; 
L355" class="line" namn>
L355">6355./a>        .a href="+code=right" class="sref">right./a> = .a href="+code=min" class="sref">min./a>(.a href="+code=left" class="sref">left./a> + .a href="+code=w" class="sref">w./a> - 1, .a href="+code=ceil64" class="sref">ceil64./a>(.a href="+code=left" class="sref">left./a>)); 
L356" class="line" namn>
L356">6356./a> 
L357" class="line" namn>
L357">6357./a>        while (.a href="+code=distance" class="sref">distance./a> > 0) { 
L358" class="line" namn>
L358">63580"a>                .a href="+code=arcfb_lcd_update_horiz" class="sref">arcfb_lcd_update_horiz./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=left" class="sref">left./a>, .a href="+code=right" class="sref">right./a>, .a href="+code=y" class="sref">y./a>, .a href="+code=h" class="sref">h./a>); 
L359" class="line" namn>
L359">6359./a>                .a href="+code=distance" class="sref">distance./a> -= ((.a href="+code=right" class="sref">right./a> -6.a href="+code=left" class="sref">left./a>) + 1); 
L360" class="line" namn>
L360">6360./a>                .a href="+code=left" class="sref">left./a> = .a href="+code=right" class="sref">right./a> + 1; 
L361" class="line" namn>
L361">6361./a>                .a href="+code=right" class="sref">right./a> = .a href="+code=min" class="sref">min./a>(.a href="+code=left" class="sref">left./a> + .a href="+code=distance" class="sref">distance./a> - 1, .a href="+code=ceil64" class="sref">ceil64./a>(.a href="+code=left" class="sref">left./a>)); 
L362" class="line" namn>
L362">6362./a>        } 
L363" class="line" namn>
L363">6363./a>} 
L364" class="line" namn>
L364">6364./a> 
L365" class="line" namn>
L365">6365./a>static void .a href="+code=arcfb_fillrect" class="sref">arcfb_fillrect./a>(struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>, 
L366" class="line" namn>
L366">6366./a>                           const struct6.a href="+code=fb_fillrect" class="sref">fb_fillrect./a> *.a href="+code=rect" class="sref">rect./a>) 
L367" class="line" namn>
L367">6367./a>{ 
L368" class="line" namn>
L368">63680"a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L369" class="line" namn>
L369">6369./a> 
L370" class="line" namn>
L370">63710"a>        .a href="+code=sys_fillrect" class="sref">sys_fillrect./a>(.a href="+code=info" class="sref">info./a>, .a href="+code=rect" class="sref">rect./a>); 
L371" class="line" namn>
L371">6371./a> 
L372" class="line" namn>
L372">6372./a>        .spa> class="comment">/* update the physical lcd */./spa>
 
L373" class="line" namn>
L373">6373./a>        .a href="+code=arcfb_lcd_update" class="sref">arcfb_lcd_update./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=rect" class="sref">rect./a>->.a href="+code=dx" class="sref">dx./a>, .a href="+code=rect" class="sref">rect./a>->.a href="+code=dy" class="sref">dy./a>, .a href="+code=rect" class="sref">rect./a>->.a href="+code=width" class="sref">width./a>, .a href="+code=rect" class="sref">rect./a>->.a href="+code=height" class="sref">height./a>); 
L374" class="line" namn>
L374">6374./a>} 
L375" class="line" namn>
L375">6375./a> 
L376" class="line" namn>
L376">6376./a>static void .a href="+code=arcfb_copyarea" class="sref">arcfb_copyarea./a>(struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>, 
L377" class="line" namn>
L377">6377./a>                           const struct6.a href="+code=fb_copyarea" class="sref">fb_copyarea./a> *.a href="+code=area" class="sref">area./a>) 
L378" class="line" namn>
L378">63780"a>{ 
L379" class="line" namn>
L379">6379./a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L380" class="line" namn>
L380">6380./a> 
L381" class="line" namn>
L381">6381./a>        .a href="+code=sys_copyarea" class="sref">sys_copyarea./a>(.a href="+code=info" class="sref">info./a>, .a href="+code=area" class="sref">area./a>); 
L382" class="line" namn>
L382">6382./a> 
L383" class="line" namn>
L383">6383./a>        .spa> class="comment">/* update the physical lcd */./spa>
 
L384" class="line" namn>
L384">6384./a>        .a href="+code=arcfb_lcd_update" class="sref">arcfb_lcd_update./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=area" class="sref">area./a>->.a href="+code=dx" class="sref">dx./a>, .a href="+code=area" class="sref">area./a>->.a href="+code=dy" class="sref">dy./a>, .a href="+code=area" class="sref">area./a>->.a href="+code=width" class="sref">width./a>, .a href="+code=area" class="sref">area./a>->.a href="+code=height" class="sref">height./a>); 
L385" class="line" namn>
L385">6385./a>} 
L386" class="line" namn>
L386">6386./a> 
L387" class="line" namn>
L387">6387./a>static void .a href="+code=arcfb_imageblit" class="sref">arcfb_imageblit./a>(struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>, const struct6.a href="+code=fb_image" class="sref">fb_image./a> *.a href="+code=image" class="sref">image./a>) 
L388" class="line" namn>
L388">63880"a>{ 
L389" class="line" namn>
L389">6389./a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L390" class="line" namn>
L390">6390./a> 
L391" class="line" namn>
L391">6391./a>        .a href="+code=sys_imageblit" class="sref">sys_imageblit./a>(.a href="+code=info" class="sref">info./a>, .a href="+code=image" class="sref">image./a>); 
L392" class="line" namn>
L392">6392./a> 
L393" class="line" namn>
L393">6393./a>        .spa> class="comment">/* update the physical lcd */./spa>
 
L394" class="line" namn>
L394">6394./a>        .a href="+code=arcfb_lcd_update" class="sref">arcfb_lcd_update./a>(.a href="+code=par" class="sref">par./a>, .a href="+code=image" class="sref">image./a>->.a href="+code=dx" class="sref">dx./a>, .a href="+code=image" class="sref">image./a>->.a href="+code=dy" class="sref">dy./a>, .a href="+code=image" class="sref">image./a>->.a href="+code=width" class="sref">width./a>, 
L395" class="line" namn>
L395">6395./a>                                .a href="+code=image" class="sref">image./a>->.a href="+code=height" class="sref">height./a>); 
L396" class="line" namn>
L396">6396./a>} 
L397" class="line" namn>
L397">6397./a> 
L398" class="line" namn>
L398">6398./a>static int6.a href="+code=arcfb_ioctl" class="sref">arcfb_ioctl./a>(struct6.a href="+code=fb_info" class="sref">fb_info./a> *.a href="+code=info" class="sref">info./a>, 
L399" class="line" namn>
L399">6399./a>                          unsigned int6.a href="+code=cmd" class="sref">cmd./a>, unsigned long6.a href="+code=arg" class="sref">arg./a>) 
L400" class="line" namn>
L400">6400./a>{ 
L401" class="line" namn>
L401">6401./a>        void .a href="+code=__user" class="sref">__user./a> *.a href="+code=argp" class="sref">argp./a> = (void .a href="+code=__user" class="sref">__user./a> *).a href="+code=arg" class="sref">arg./a>; 
L402" class="line" namn>
L402">6402./a>        struct6.a href="+code=arcfb_par" class="sref">arcfb_par./a> *.a href="+code=par" class="sref">par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">par./a>; 
L403" class="line" namn>
L403">6403./a>        unsigned long6.a href="+code=flags" class="sref">flags./a>; 
L404" class="line" namn>
L404">6404./a> 
L405" class="line" namn>
L405">6405./a>        switch (.a href="+code=cmd" class="sref">cmd./a>) { 
L406" class="line" namn>
L406">6406./a>                case6.a href="+code=FBIO_WAITEVENT" class="sref">FBIO_WAITEVENT./a>: 
L407" class="line" namn>
L407">6407./a>                { 
L408" class="line" namn>
L408">64080"a>                        .a href="+code=DEFINE_WAIT" class="sref">DEFINE_WAIT./a>(.a href="+code=wait" class="sref">wait./a>); 
L409" class="line" namn>
L409">6409./a>                        .spa> class="comment">/* illegal to wait on arc if no irq will occur */./spa>
 
L410" class="line" namn>
L410">6410./a>                        if (!.a href="+code=par" class="sref">par./a>->.a href="+code=irq" class="sref">irq./a>) 
L411" class="line" namn>
L411">6411./a>                                return -.a href="+code=EINVAL" class="sref">EINVAL./a>; 
L412" class="line" namn>
L412">6412./a> 
L413" class="line" namn>
L413">6413./a>                        .spa> class="comment">/* wait until the Arc has generated a> interrupt./spa>
 
L414" class="line" namn>
L414">6414./a>.spa> class="comment">                         * which will wake us up */./spa>
 
L415" class="line" namn>
L415">6415./a>                        .a href="+code=spin_lock_irqsave" class="sref">spin_lock_irqsave./a>(&.a href="+code=par" class="sref">par./a>->.a href="+code=lock" class="sref">lock./a>, .a href="+code=flags" class="sref">flags./a>); 
L416" class="line" namn>
L416">6416./a>                        .a href="+code=prepare_to_wait" class="sref">prepare_to_wait./a>(&.a href="+code=arcfb_waitq" class="sref">arcfb_waitq./a>, &.a href="+code=wait" class="sref">wait./a>, 
L417" class="line" namn>
L417">6417./a>                                        .a href="+code=TASK_INTERRUPTIBLE" class="sref">TASK_INTERRUPTIBLE./a>); 
L418" class="line" namn>
L418">64180"a>                        .a href="+code=spin_unlock_irqrestore" class="sref">spin_unlock_irqrestore./a>(&.a href="+code=par" class="sref">par./a>->.a href="+code=lock" class="sref">lock./a>, .a href="+code=flags" class="sref">flags./a>); 
L419" class="line" namn>
L419">6419./a>                        .a href="+code=schedule" class="sref">schedule./a>(); 
L420" class="line" namn>
L420">6420./a>                        .a href="+code=finishfinishfinishfinishfiine" namn>
L418">64180"a>     +code=arcfb_waitq" class="sref">arcfb_waitq./a>, &.a href="+code=wait" class="sref">wait./a>, wait./a>, 3./a>(+code=flagsr" class="sref">par./a>->.a href="+code=lock" class="sref">lock./a>, ss="sref">spin_unlock_irqrestore./a>(&.:, ss="sref">spin_unlock_irqrestore./.a href="4code=right" class="sref"4right4/a>, unsigned int6.a hs/video/arcfb.c#L407" id>GETCONTROL2flagsr" class="" id>GETCONTROL2a>                { 
L324" class="line" namn>
L324">63242ed a> interrupt./spa>                      .a href="+codistance" 4lass="sref">distance./a>4 .a h4ef="+code=uppeeeeeeeeeeeeeeeee" class="sref">par./a>->.actl2flagsr" class="ctl2a> 
L3264 class="line" namn>
L3264>63264/a>        .a href="+code=distance" cla4s="sref">4istance./a> = .a href="+4ode=h42_wait./a>(&.a href="+code=arcfb_waitq" cctl2flagsr" class="ctl2a> ; ); 
L403">6403./a>  r./a>->.a href="+code=lock" class=  .a hrefr./a> = .a href="+code=f4oor8"42s="sref">TASK_INTERRUPTIBLE./eo/arcfb.c#L283" id"srehrefrivers/video/arcfb."srehrefriveimage./a>); wait./a>, 3./a>(+cctl2flagsr" class="ctl2a> <, videofarcfb.c#L283" id"tl2flagsr" class="ctl2a> <))                              retursref">low4r./a> = .a href="+code=m4n" cl42n_unlock_irqrestore./a>(&;;;;;;;;.c#L412" id>
L412" classFAUL="drivers/video/sFAUL=a> 
L3304>633142a href="drivers/video/arcfb.c.c#L412               } else { distance./a> > 4) { <438">64180"a>     +code ss="sref">spin_unlock_irqrestore./ce" class4"sref">distance./a> -= (4.a hr4f="+code=lower" class=default              { arcf4_lcd_4pdate_vert./a>(.a href;;;;;;;;.c#L412" id>
L412" class="line" namn>
L412">6412./a> upper./a> = .a href=4+code434">6314./a>} lower./a> = .a href=4+code43/a> 
L336" class="line" n4mn>
L43a>        .a href="+code=distance" cla4" id>
L334" class="line" namn>
L334">63343class="line" namn>
L317">6317./a>.spa> class="comment"> * here we han4 id>
L3384 class="line" namn>
L3384>633843e_vert will./spa>
 
path from96" r wice.l414yhs/n seek2" cl>
L295410"a>.spa> class="comment"> * individual 4ef="drive4s/video/arcfb.c#L339" id4
L3394 class="line" namn>
L339">63"drthnamn. it's" neffici9">18" clasmnamn>o2" ything lid>
amn>
L3*80"a>.spa> class="comment"> * individual 4e=scheduleess of splitting out the4fb up4ate into./spa>
 63innamn>
>
L29()2" yway2./a>.spa> class="comment"> */./spa>
 
 
 (#L420" id>
L420"vide_f="+code=image" cvide_f">631class="sref">wait./a>,
L29href="drivers/viL418"c
L29lass="sref">info./a>, const struct6.a href="+code=fb_image" class="sref">fb_image./a> *.a href="+code=image" clasref">par./a>->.a h href="+code=__user" class="sref">__user./a> *buff="+code=__userbufa>                                     ref="driv4rs/video/arcfb.c#L343" i4>
L3444date_vert./a>(.a href;;;;;;;; .c#L420" id>
L420"ide_f="+code=image" cide_f">631class="sref">wacounf="+code=image" counfL419" id>
L419" classloff_f="+code=image" loff_fnfo./a>->.a href="+pone" namn>
L419">+pona>                                returupdate" c4ass="sref">arcfb_lcd_upd4te./a44/a>        unsigned int6.a href="+code=4.a href="4code=dy" class="sref">dy4/a>, 4nsigned int6.af="drivers/video/arcfb.c#mod="linrom9epson 1355="5./a>                        .a href="+codd.c#L336"4" class="line" namn>
L344">63444a>        .a href="+code=distance" cla4eft" clas4="sref">left./a>, .a hre4="+co4e=right" class="sref">r04" id>
L404" class= href="+code=arg/a>        .a href="+code=lower" class=4 id>
L3484 class="line" namn>
L3484>634844s="sref">TASKs="sref">arg./a>) 
L412" class="line" namn>
L412">6412./a> 
 arg./a>) 
L395">6fbmemlengneL419"ref">arg./a>) arg./a>) 
L35t./a>, 3./a>(+coflagsr" class="s>
L35t./a>, 3./a>(+cnamn>
L359">6359./a> " id>
L419" classbit+pone" namn>
L419">bit+pon/a> " id>
L419" classarcfbpone" namn>
L419">arcfbpon/a> " id>
L419" classendpone" namn>
L419">endpon/a> " id>
L419" classbitcounf="+code=image" bitcounfa> par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">pa href="drivers/video/arcfb.c#L413"">h./a> +4 .a href="+code=dy" clas4="sre4">dy./a> -6.a arg" class="sref">arg./a>) 
L419">xrenf">pa href="drivers/video/arcfb.c#L413""own to 64.a href="+code=iceil8" c4ass="45a>        .spa> class="comment">/* upd4 id>
L3534 class="line" namn>
L3534>635345vers/video/arc>
L404" class= href="+code=arg/a>   =/a>->.a href="+pone" namn>
L419">+pona>  a href="drivers/video/arcfb.c#L413""pdate" c4istance./a> = .a href="+4ode=w4 class="sref">w./a>; par./a>; 
L403" class="line" namn>
L403">6403./a>        unsigned long6.a href="+code=ref">left4/a> = .a href="+code=dx"4class4"sref">dx./a>; 
L419">xrenf">par./a>; 
L403" class="linv" namn>
L403">640v./a>  .ref">arg./a>) 
L419">xrenf">pa href="drivers/video/arcfb.c#L413"".c#L336"4t./a> = .a href="+code=m4n" cl4ss="sref">min./a>(.a href="+cfbmemlengne" namn>
L395">6fbmemlengneL419">top./a>) + 1; 
L419">xrenf">pa*./a>; 
L403" class="linv" namn>
L403">640v./a>  .ref">arg./a>) 
L419">yrenf">p)/               .a href="+code=arcfb4 id>
L3574 class="line" namn>
L3574>63574/a>        while (.a href="+code=distan4e" class=4sref">distance./a> > 4) { <4 href="driverseo/arcfb.c#L283" id href="+code=arg/a>   580"a/a>(.a href="+cfbmemlengne" namn>
L395">6fbmemlengneL419                              returlcd_updat4_horiz" class="sref">arc4b_lcd4update_horiz./a>(.a hr.c#L412" id>
L412" classNOSPCe" namn>
L412">6NOSPCf">pa href="drivers/video/arcfb.c#L413""=schedule"sref">distance./a> -= (4.a hr45a>        .a href="+code=sys_fillrect"4class="sr4f">left./a> = .a href="+4ode=r46de=info" class="sref">info./eref="+code=__userere="sr">t               } else { right./a> = .a href=4+code4min" class="sreo/aarcfb.c#L283" id"sunf="+code=image" counfL419ass="sref">ceil64. href="+code=arg/a>  ) 580"a/a>(.a href="+cfbmemlengne" namn>
L395">6fbmemlengneL419 >                      .a href="+codb.c#L363"4id>
L363" class="line" n4mn>
L46date_vert./a>(.a hrefrcfb.c#L283" id"sunf="+code=image" counfL419a/a>); 
L395">6fbmemlengneL419"360" id>
L360" cl href="+code=arg/a>        .a href="+code=lower" class=4" id>
L364" class="line" namn>
L364">63646ower" class="sref">lower./a> + 1; t" id>
L412" classNOSPCe" namn>
L412">6NOSPCf">pa href="drivers/video/arcfb.c#L413" id>
L3654 class="line" namn>
L3654>636546sref">dx./a>;a href="drivers/video/arcfb.c#L3764rect" cla4s="sref">arcfb_fillrect.4a>(st46a>        .a href="+code=distance" cla4ct6.a hre4="+code=fb_fillrect" cla4s="sr4f">fb_fillrecteo/arcfb.c#L283" id"sunf="+code=image" counfL419 >                      .a href="+codb" class=4" class="line" namn>
L364">63646s="sref">TASK_INTERRUsref"ef">__user./a> *base_addef="+code=__userbase_addef">pa href="drivers/video/arcfb.c#L413" cd_updat4"sref">arcfb_par./a> *.a4href=4+code= href="drivers/video/arcfb.c#L413" =schedule class="line" namn>
L3704>637146="+code=right" class="sref">right./abase_addef="+code=__userbase_addef">p">tosref">par./a>->.a hfor href="+code=left hfor hf">pa*L402" class="linrivers/video/arcfb.c#L403" id>
L403" class="linscreen_base"line" namn>
L420reen_basef">pa href="drivers/video/arcfb.c#L413"class="sr4f">sys_fillrect./a>(.a h4ef="+47ht" class="sref">right./a> + 1; ); ); p"ss="sref">ceil64. href="+code=arg/a>  " id>
L419" classbuff="+code=__userbufa>   ht./a> + 1; ->.a href="+code=lock" class id>
L3724 class="line" namn>
L3724>637247="+code=lower" class=a>->.a href="+pone" namn>
L419">+pona>  a href="drivers/vid"sunf="+code=image" counfL419./a>->.a href="+code=lock" class .c#L363"4sical lcd */./spa>
 t" id>
L412" classFAUL="drivers/video/sFAUL=a> arcfb_lcd_update.4a>(.a474">6314./a>} 
L374" class="line" namn>
L374">63747a>        switch (.a href="+code=cmd" c id>
L3764 class="line" namn>
L3764>63764/a>static void .a href="+code=arcfb_cop4area" cla4s="sref">arcfb_copyarea.4a>(st47class="sref">h./a>; 
L419">bit+pon/a> a/a>);   *               .a href="+code=arcfb4ct6.a hre4="+code=fb_copyarea" cla4s="sr47lass="sref">floor8./a>(.a hrarcfbpone" namn>
L419">arcfbpon/a> ./a>); 
L419">iversXrenimage./a>); 
L419">bit+pon/a> " id>
L419" classxrene" namn>
L419">xrenf">pr./a>->.a href="+code=lock" class cd_updat4" class="line" namn>
L374">63747s="sref">min./a>(.a href="+cendpone" namn>
L419">endpon/a> ./a>); 
L419">b.c#Xrenimagee./a>); 
L419">bit+pon/a> "ssarcfb.c#L283" id"sunf="+code=image" counfL419*8))" id>
L419" classxrene" namn>
L419">xrenf">pr./a>->.a href="+code=lock" class =schedule"sref">arcfb_par./a> *.a4href=47ef">floor8./a>(.a href="+codbitcounf="+code=image" bitcounfa> <./a>); 
L419">endpon/a> .360" id>
L360" clarcfbpone" namn>
L419">arcfbpon/a> ./a>->.a href="+code=lock" class id>
L3814 class="line" namn>
L3814>63814/a>        .a href="+code=sys_copyarea"4class="sr4f">sys_copyarea./a>(.a h4ef="+4ode=info" class="sref">info./ode=dy" class="sxL419./a>); 
L419">arcfbpon/a> .%"a/a>(.a href="+cxrene" namn>
L419">xrenf">pa href="drivers/video/arcfb.c#L413" id>
L3834 class="line" namn>
L3834>638348vers/video/arc>
L404" class=e=dy" class="sref">dy./a>); 
L419">arcfbpon/a> ./a/a>(.a href="+cxrene" namn>
L419">xrenf">pa href="drivers/video/arcfb.c#L413" e" class4sical lcd */./spa>
 w./a>; 
L419">xrenf">pa href="drivers/video/arcfb.c#L413"  id>
L374"sref">arcfb_lcd_update.4a>(.a4href="+code=par" class="sref"e=h" class="sref">h./a>);  <./a/a>(.a href="+cxrene" namn>
L419">xrenf">pa href="drivers/video/arcfb.c#L413" id>
L3764" class="line" namn>
L384">63848s="sref">min./a>(.a href="+c>par./a>, .a href="+code=image" class="sref">image./a>->.a href="+code=dx" class="sref">dx./a>, .a href="+ode=dy" class="sxL419"rc>
L404" class=e=dy" class="sref">dy"rc>
L404" class=rivers/video/arcfb.c#L3r" class="sref"e=h" class="sref">h./r./a>->.a href="+code=lock" class id>
L3874 class="line" namn>
L3874>63874/a>static void .a href="+code=arcfb_ima4eblit" cl4ss="sref">arcfb_imagebli4./a>(48href="driverseo/arcfb.c#L283" id"sunf="+code=image" counfL419rtic void .a href="+code=arcfb_ima4ecd_updat4" class="line" namn>
L384">63848pdate_horiz./a>(.a hr.c#L412ef="drivers/vid"sunf="+code=image" counfL419./a>->.a href="+code=lock" classar" class4"sref">arcfb_par./a> *.a4href=4+code=par" cla.c#L412ef="drivers/videref="+code=__userere="sr./a>->.a href="+code=lock" class id>
L3914 class="line" namn>
L3914>63914/a>   sys_imageblit./a>(.a4href=49a>        .spa> class="comment">/* upd4 id>
L3934 class="line" namn>
L3934>63934/a>   iz./a>("sref">info./a>, const stopne" namn>
L419">istopnode=p/a>(.a href="+c>par./opne" namn>
L419">>par./opn>h./a>)                      .a href="+codte the ph4sical lcd */./spa>
 arg./a>) >); arcfb_lcd_update.4a>(.a4href="+code=pa.ref">arg./a>) ); par./opedb.c#L                     .a href="+codtid>
L3764image" class="sref">imag4./a>-4gt;.a href="+c.ref">arg./a>) ); 
L394">639496;.a href="+c.ref">arg./a>) ); 
L3984>6398497;.a href="+c.ref">arg./a>) 
L4r./release;.a href=>); 
L4>par./releaselassL                     .a href="+codtcd_updat4ref">arcfb_ioctl./a>(str4ct6.a498;.a href="+c.ref">arg./a>) n_displae=dy" class="sre="sref">n_displaelassL                     .a href="+codtr" class4"+code=cmd" class="sref"4cmd./4>, unsigned lo.ref">arg./a>) ); fb_info./a> *.a href="+code=info" classL                     .a href="+co5" id>
L405" class="line" namn>
L405">640500 unsigned lo.ref">arg./a>) ); fb_info./a> *.a href="+code=info" classL                     .a href="+co5"1id>
L405"f">sys_imageblit./a>(.a5ode=a5gp" class="sre.ref">arg./a>) ); fb_info./a> *.a href="+code=info" classL                     .a href="+co5"2id>
L405"class="line" namn>
L3935href=5+code=par" cla.ref">arg./a>)  *.a href="+c=info" classcode=pa>); 
L405"ical lcd */./spa>
 
L4055 class="line" namn>
L4055>64055/a>        switch (.a href="+code=cmd" 5lass="sre5">cmd./a>) { arg./a>) <__devininfo./a> *.a href__devininode=p/a>(.a href="+c>par./probe"line" namn>
L4>par./probeage./"sref">info./a>, constplatform_devi href="+code=leftplatform_devi hf">pa*info./a>, constdevref="+code=leftdevL419rtic void .a href="+code=arcfb_ima5BIO_WAITE5ENT" class="sref">FBIO_W5ITEVE5T./a>:                      .a href="+co5deo/arcfb5c#L408" id>
L408" class=5line"5namn>
L408">64"sref">info./a>, const struct6.a href="+code=fb_image" class="sref">fb_image./a> *.a href="+code=im./a>->.a href="+code=lock" clas5 8o/arcfb5cef">arcfb_ioctl./a>(str5WAIT.5a>(.a href="+cs="sref">arg./a>) <.c#va/a> *.a href="+c.c#va/="sr">t" id>
L412" classNOMEMe" namn>
L412">6NOMEMe=im./a>->.a href="+code=lock" clas5 9o/arcfb5c+code=cmd" class="sref"5if no5irq will occurs="sref">arg./a>) 
L412">code=memorycidee=im./a>->.a href="+code=lock" clas5"+code=pa5" class="sref">par./a>-&5t;.a 51>dy./a> -6.a arg" classref"ef">__user./a> *code=memorye" namn>
L412">code=memorye=im./a>->.a href="+code=lock" clas5"1id>
L405="+code=EINVAL" class="s5ef">E5NVAL./a>; par./a> = .a href="+code=info" class="sref">info./a>->.a href="+code=par" class="sref">pa href="drivers/video/arcfb.c#L4135 id>
L4135 class="line" namn>
L4135>6413512q will occurs="sref">arg./a>)  *.a href="+f">pa href="drivers/video/arcfb.c#L4135 3id>
L405* wait until the Arc has5gener5ted a> href="drivers/video/arcfb.c#L4135 id>
L4055* which will wake us up 5/./sp51ref="+code=par" class="sref"code=memorycidee" namn>
L412">code=memorycidee=im">to((64*64)a>->.a href="nume=ilne" namn>
L419">nume=ilnL419ra>->.a href="numerowne" namn>
L419">numerownL419r/               .a href="+code=arcfb5e=spin_lo5k_irqsave" class="sref">5pin_l51a>static void .a href="+code=arcfb_cop5e=prepare5to_wait" class="sref">pr5pare_5o_wait./a>(&amf="drivers/video/arcfb.c#We neamn> flat backing ss="s18" clas" cl's./a>                        .a href="+co5   .a hre5="+code=TASK_INTERRUPTIB5E" cl51e_vert will./spa>
 -flat actvide">63linrRUPbuffe6410./a>                        if (!.a href5e=spin_un5ock_irqrestore" class="s5ef">s51s="sref">min./a>(.a href="+ccode=memorye" namn>
L412">code=memorye=ima>); 
L412">czallocage./a>->.a href=code=memorycidee" namn>
L412">code=memorycidee=imr./a>->.a href="+code=lock" clas5e=schedul5" class="sref">schedule.5a>();5
L412">code=memorye=imrtic void .a href="+code=arcfb_ima5e=finishf5nishfinishfinishfiine" n5mn>
L518">64180"a>     +code.c#L412ef="drivers/vid.c#va/a> *.a href="+c.c#va/="sr./a>->.a href="+code=lock" clas5="sref">l5ck./a>, ss="sref">spin_u5lock_52a>        .spa> class="comment">/* upd5.a href="5code=right" class="sref"5right52vers/video/arc>
L404" class=mage./a> *.a href="+code=ima>); 
L412">rrRUPbuffe6_allocage./"ideofass="sref">par./a> = .a href="+code=info" class="sref">info.)ef">wait./a>, 3./a>(+cdevref="+code=leftdevL419e./a>->.a href="+cevref="+code=leftdevL419r./a>->.a href="+code=lock" clas5=3id>
L405" class="line" namn>
L325">63252ed a> interrurq./a>) distance./a>5 .a h5ef="+code=uppeeeeeeeeegoto2ef="drivers/videref="+code=__userere="sr./a>->.a href="+code=lock" clas5 id>
L3265 class="line" namn>
L3265>63265/a>        .a href="+code=distance" cla5s="sref">5istance./a> = .a href="+5ode=h52class="sref">h./a>; 
L403" class="linscreen_base"line" namn>
L420reen_basef">p">tosref">par./a>->.a hi=memfo./a> *.a href__i=memnfo./aL402" class="lincode=memorye" namn>
L412">code=memorye=im./a>->.a href="+code=lock" clas5=  .a hre5r./a> = .a href="+code=f5oor8"52lass="sref">floor8./a>(.a hrrivers/video/arcfb.c#L403" id>
L403" class="linfbopne" namn>
L419">isopn>h./a>)ait" class="sref">wait./a>opne" namn>
L419">>par./opn>h././a>->.a href="+code=lock" clas5==spin_un5r./a> = .a href="+code=m5n" cl52code= href="drivers/video/arcfb.c#L4135 =schedul5 class="line" namn>
L3305>633152ef">floor8./a>(.a href="+codrivers/video/arcfb.c#L403" id>
L403" class="linv" namn>
L403">640v./a>  a>); 
L403">640>par./v" >h././a>->.a href="+code=lock" clas5e" class=5sref">distance./a> > 5) { <53de=info" class="sref">info./rivers/video/arcfb.c#L403" id>
L403" class="linfiode=dy" class="sfioa>  a>); l5"sref">distance./a> -= (5.a hr53de=info" class="sref">info./+code=par" class="sref">par./a>; 
L403" class="line" namn>
L403">6403./a>        unsigned long6.a href="+code5lcd_updat5_vert" class="sref">arcf5_lcd_53vers/video/arc>
L404" class= ers/video/arcfb.c#L411" id>
L411" class="lineage./a> *.a href="+code=ima>); ->.a href="+code=lock" clas5 class="s5ef">upper./a> = .a href=5+code53ed a> href="drivers/video/arcfb.c#L4135 class="s5ef">lower./a> = .a href=5+code534d a> interrurq./a>)  || a>)  || a>)  >                      .a href="+co5b.c#L336"5id>
L336" class="line" n5mn>
L53k_irqsave./a>(&.ac>
L404" class= rintivers/video/arcf rintiage./a>->.a href=KERN_WARNINGvers/video/arcfKERN_WARNINGode=p/ will./spa>
ss=ing">"no IO addeid>9s vupplied\n"./a>   r./a>->.a href="+code=lock" clas5" id>
L335" class="line" namn>
L335">63353_wait./a>(&.a hregoto2ef="drivers/videre1vers/video/arcfere1e=im./a>->.a href="+code=lock" clas5   .a hre5 class="line" namn>
L3385>633853lass="sref">fmin./a>(.a href="+c ers/video/arcfb.c#L411" id>
L411" class="lindio_addef="+code=__userdio_added a> >); ./a>->.a href="+code=lock" clas5 =schedul5ess of splitting out the5fb up53ef">floor8./a>(.a href="+cod ers/video/arcfb.c#L411" id>
L411" class="lincio_addef="+code=__usercio_added a> /a>); ./a>->.a href="+code=lock" clas5locks of 5ixels. we end up splitti5g int54de=info" class="sref">info./ ers/video/arcfb.c#L411" id>
L411" class="linc2io_addef="+code=__userc2io_added a> /a>); ./a>->.a href="+code=lock" clas5l"sref">l5x8 pages../spa>
 info./+code=par" class="sref">pid>
L411" class="lincsluf="+code=image" csluff">p[0]">t x0               } else { 
L3454vers/video/arc>
L404" class= ers/video/arcfb.c#L411" id>
L411" class="lincsluf="+code=image" csluff">p[1]">t x06              } else { arcfb_lcd_upd5te./a54class="sref">w./a>; 
L403" class="linf"line" namn>
L419">6419./a>  /a>); ./a>->.a href="+code=lock" clas5lclass="s5code=dy" class="sref">dy5/a>, 54ref="+code=par" class="sref"de=lock" clninfo./a> *.a hrefde=lock" clninage./lock./a>, .a href="+code=flags" class="sref">flags./a>); 
L345">63454s="sref">min./a>(.a href="+c.c#va/a> *.a href="+c.c#va/="sr">t/a>(.a href="+c.cgister_rrRUPbuffe6a> *.a href="+c.cgister_rrRUPbuffe6age./a>->.a href=mage./a> *.a href="+code=imr./a>->.a href="+code=lock" clas5d id>
L335="sref">left./a>, .a hre5="+co54">fb_fillrecteo/arcfb.c#L283" id.c#va/a> *.a href="+c.c#va/="sr"< 0rtic void .a href="+code=arcfb_ima5 id>
L3485 class="line" namn>
L3485>634854s="sref">TASK_INTERRUgoto2ef="drivers/videre1vers/video/arcfere1e=im./a>->.a href="+code=lock" clas5n the req5est first */./spa>
 min./a>(.a href="+c latform_set_drvdatfo./a> *.a href= latform_set_drvdatfage./a>->.a href=cevref="+code=leftdevL419">width./a>,  *.a href="+code=imr./a>->.a href="+code=lock" clas5d=schedul5.a href="+code=floor8" c5ass="54a href="driverq./width./a>, 
L411">6411./a>   >                      .a href="+co5">h./a> +5 .a href="+code=dy" clas5="sre55ht" class="sref">right./a> + 1; 
L411" class="line" namn>
L411">6411./a>  a>); 
L411">6411./a>  ./a>->.a href="+code=lock" clas5"own to 65.a href="+code=iceil8" c5ass="55="+code=lower" class=eo/arcfb.c#L283" id.cquest_m" namn>
L411">641.cquest_m" age./a>->.a href=vers/video/arcfb.c#L411" id>
L411" class="line" namn>
L411">6411./a>  ef">wait./a>, 3./a>(+code=inf14">6414de=dy" class="s>par./414">6414./19">width./a>, ->.a href="+code=lock" clas5"ef="driv5 class="line" namn>
L3535>635355vers/video/arrrrrrrrrrrrrrrrrrrrrrrrr/ will./spa>
ss=ing">"ock" "./a>   ">width./a>,  *.a href="+code=imr >                      .a href="+co5"class="s5istance./a> = .a href="+5ode=w5 class="sref">lass="sref">right./a> + 1; ->.a href=KERN_INFOvers/video/arcfKERN_INFOd a> href="drivers/video/arcfb.c#L4135ref">left5/a> = .a href="+code=dx"5class55f="+code=uppeeeeeeeeerrrrrrrrrrrrrrrr/ will./spa>
ss=ing">"ock" : Failed .cq IRQ.%"d\n"./a>   ">width./a>, 
L411" class="line" namn>
L411">6411./a>   ./a>->.a href="+code=lock" clas5".c#L336"5t./a> = .a href="+code=m5n" cl55k_irqsave./a>(&.aaaaaaaaagoto2ef="drivers/videre1vers/video/arcfere1e=im./a>->.a href="+code=lock" clas5 id>
L3575 class="line" namn>
L3575>635755_wait./a>(&.a hredistance./a> > 5) { <55lass="sref">farc5b_lcd55s="sref">min./a>(.a href="+c rintivers/video/arcf rintiage./a>->.a href=KERN_INFOvers/video/arcfKERN_INFOd a> href="drivers/video/arcfb.c#L4135r=schedul5"sref">distance./a> -= (5.a hr55="+code=right" class/ will./spa>
ss=ing">"" %"d:" clarrRUP buffe64devi h, using %"dK of eo/ar memory\n"./a>   " href="drivers/video/arcfb.c#L4135class="sr5f">left./a> = .a href="+5ode=r56ht" class="sref">rigw./a>; 
L403" class="linn"lirs/video/arcfb.n"li./19">width./a>, 
L412">code=memorycidee=im"d>
L580"a10 ./a>->.a href="+code=lock" clas5 class="s5ef">right./a> = .a href=5+code56a>        .spa> class="comment">/* upd5b.c#L363"5id>
L363" class="line" n5mn>
L56date_vert./a>f="drivers/video/arcfb.c#this" ninsne" n">63but doesn'tiveea64dirty pixels410./a>                        if (!.a href5" id>
L365" class="line" namn>
L365">63656ower" class="8" c/width./a>,   a>)0"a/a>(.a href="+crrs/video/arcfb.ca>  a< 403" class="linnume=ilne" namn>
L419">nume=ilnL419a*./a>; 
L419">numerownL419"a/a>(.a href="+crrs/video/arcfb.ca>  ++ >                      .a href="+co5 id>
L3655 class="line" namn>
L3655>636556f="+code=uppeeeeeeeee/a>(.a href="+cndex" c
L29b_ctlrs/video/arcfb.ndex" c
L29b_ctlage./a>->.a href=vers/video/arcfb.c#L411" ">width./a>,   ">width./a>,    ./a>->.a href="+code=lock" clas5rect" cla5s="sref">arcfb_fillrect.5a>(st56k_irqsave./a>(&.ac>
L404" class=ndex" set_arcfb_cfb_fi/video/arcfb.ndex" set_arcfb_cfb_age./a>->.a href=vers/video/arcfb.c#L411" ">width./a>,   ">0 ./a>->.a href="+code=lock" clas5 id>
L3575="+code=fb_fillrect" cla5s="sr56_wait./a>(&.a hrec>
L404" class=ndex" set_yaddef="+code=__userndex" set_yaddeage./a>->.a href=vers/video/arcfb.c#L411" ">width./a>,   ">0 ./a>->.a href="+code=lock" clas5 " class=5" class="line" namn>
L365">63656s="sref">TASK_INTERRUc>
L404" class=ndex" set_xaddef="+code=__userndex" set_xaddeage./a>->.a href=vers/video/arcfb.c#L411" ">width./a>,   ">0 ./a>->.a href="+code=lock" clas5 cd_updat5"sref">arcfb_par./a> *.a5href=56pdate_horiz./a>(.a hr/a>(.a href="+cndex" c
L29b_ctlrs/video/arcfb.ndex" c
L29b_ctlage./a>->.a href=vers/video/arcfb.c#L411" ">width./a>,   ">width./a>,    ./a>->.a href="+code=lock" clas5r=schedul5 class="line" namn>
L3705>637156="+code=rightsys_fillrect./a>(.a h5ef="+57a>        .a href="+code=sys_copyarea"5 id>
L3725 class="line" namn>
L3725>637257="+code=loweref="drivers/video/arcfb.c#fdeo/wer9541ldnamnsplashne" n20reen,deo/justiveea64it410./a>                        if (!.a href5 .c#L363"5sical lcd */./spa>
    >                      .a href="+co5te" class5"sref">arcfb_lcd_update.5a>(.a57class="sref">lass="sr8" c/width./a>,   a>)0"a/a>(.a href="+crrs/video/arcfb.ca>  a< 403" class="linnume=ilne" namn>
L419">nume=ilnL419a*./a>; 
L419">numerownL419"a/a>(.a href="+crrs/video/arcfb.ca>  ++ >                      .a href="+co5tid>
L3655" class="line" namn>
L375">63757f="+code=uppeeeeeeeeerrrrrrrr/a>(.a href="+c rintivers/video/arcf rintiage./a>->.a href=KERN_INFOvers/video/arcfKERN_INFOd a>s/ will./spa>
ss=ing">"" %"d:"splashing l>63%"d\n"./a>   "                     .a href="+co5tect" cla5 class="line" namn>
L3765>637657k_irqsave./a>(&.aaaaaaaaarrrrrrrr/a>(.a href="+crivers/video/arcfb.c#L403" id>
L403" class="linn"lirs/video/arcfb.n"li./19">width./a>,    ./a>->.a href="+code=lock" clas5area" cla5s="sref">arcfb_copyarea.5a>(st57_wait./a>(&.a href="+code=arcfb_waitq" cndex" set_arcfb_cfb_fi/video/arcfb.ndex" set_arcfb_cfb_age./a>->.a href=vers/video/arcfb.c#L411" ">width./a>,   ">0 ./a>->.a href="+code=lock" clas5ct6.a hre5="+code=fb_copyarea" cla5s="sr57s="sref">TASK_INTERRUPTIBLE./=arcfb_waitq" cndex" veea6s="sfi/video/arcfb.ndex" veea6s="sage./a>->.a href=vers/video/arcfb.c#L411" ">width./a>,    ./a>->.a href="+code=lock" clas5ccd_updat5" class="line" namn>
L375">63757pdate_horiz./a>(.a hrarcfb_par./a> *.a5href=57="+code=right
L3815>63815/a>        .a href="+code=sys_copyarea"5class="sr5f">sys_copyarea./a>(.a h5ef="+5ode=info" clas.c#L412               } else { 
L3835>638358vers/ef="drivers/videre1vers/video/arcfere1e=im              { 
 w./a>; 
L4rrRUPbuffe6_releaseage./a>->.a href=mage./a> *.a href="+code=imr./a>->.a href="+code=lock" clas5  id>
L375"sref">arcfb_lcd_update.5a>(.a5href="ef="drivers/viderevers/video/arcferee=im              { 
L385">63858s="sref">min./a>(.a href="+cvfreee" namn>
L412">cfreeage./a>->.a href=code=memorye" namn>
L412">code=memorye=imr./a>->.a href="+code=lock" clas5 rea" cla5 class="line" namn>
L3875>6387586e=info" clas.c#L412rcfb.c#L283" id.c#va/a> *.a href="+c.c#va/="sr./a>->.a href="+code=lock" clas5 t6.a hre5ss="sref">arcfb_imagebli5./a>(58href=
L385">63858code= href="drivers/video/arcfb.c#L4135ar" class5"sref">arcfb_par./a> *.a5href=5+code= href="s="sref">arg./a>) <__devexinfo./a> *.a href__devexind a>s/./a>, 3./a>(+code=inremo->.a href="+coode=inremo-&age./"sref">info./a>, constplatform_devi href="+code=leftplatform_devi hf">pa*info./a>, constdevref="+code=leftdevL419rtic void .a href="+code=arcfb_ima5 id>
L3915 class="line" namn>
L3915>63915/a>                         .a href="+co5 class="s5ef">sys_imageblit./a>(.a5href=59VAL./a>; par./a> = .a struct6.a href="+code=fb_image" class="sref">fb_image./a> *.a href="+code=ima/a>); ->.a href="+code=lock" clas5 id>
L3935 class="line" namn>
L3935>63935/a>   /a>->.a href="+code=lock" clas5 e" class5sical lcd */./spa>
                       .a href="+co5t id>
L375"sref">arcfb_lcd_update.5a>(.a59f="+code=uppeeeeeeeee/a>(.a href="+cun.cgister_rrRUPbuffe6a> *.a href="+cun.cgister_rrRUPbuffe6age./a>->.a href=mage./a> *.a href="+code=imr./a>->.a href="+code=lock" clas5tid>
L3765image" class="sref">imag5./a>-59k_irqsave./a>(&.ac>
L404" class=vfreee" namn>
L412">cfreeage./(voidsref">arg./a>) <__for href="+code=left hfor hf">pa*L402" class="linrivers/video/arcfb.c#L403" id>
L403" class="linscreen_base"line" namn>
L420reen_basef">pr./a>->.a href="+code=lock" clas5trea" cla5" class="line" namn>
L395">63959_wait./a>(&.a hrec>
L404" class=rrRUPbuffe6_release"line" namn>
L4rrRUPbuffe6_releaseage./a>->.a href=mage./a> *.a href="+code=imr./a>->.a href="+code=lock" clas5tblit" cl5 class="line" namn>
L3985>639859lass="sref">farcfb_ioctl./a>(str5ct6.a598;.a href="+c.c#L412               } else { , uns
L406" class="line" namn>
L406">64060a>        .a href="+code=sys_copyarea"6"1id>
L406"f">sys_imageblit./a>(.a6ode=a60e_horiz./a>("sref">info./a>, constplatform_df="+cref="+code=leftplatform_df="+cd a>s/./a>, 3./a>(+code=indf="+cref="+code=leftode=indf="+ce=ima/a                      .a href="+co6"2id>
L406"class="line" namn>
L3936href=6+code=par" cla.ref">arg./a>) 
L4probeage.pa>); 
L4>par./probeage."                     .a href="+co6"3id>
L406"ical lcd */./spa>
 arg./a>) 
L406"sref">arcfb_lcd_update.6>640560ref="+code=pa.ref">arg./a>) 
L406"mage" class="sref">imag6vers/60k_irqsave./a>(&.a.ref">arg./a>) irs/video/arcfb.n">i_irqsav=r/ will./spa>
ss=ing">"ock" "./a>   "                     .a href="+co6"6id>
L406" class="line" namn>
L396ITEVE60_wait./a>(&am}"                     .a href="+co6"7id>
L406"class="line" namn>
L3986line"6namn>
}./a>->.a href="+code=lock" clas6 8o/arcfb6cef">arcfb_ioctl./a>(str6WAIT.60code= href="drivers/video/arcfb.c#L4136 9o/arcfb6c+code=cmd" class="sref"6if no609_horiz./a>("sref">info./a>, constplatform_devi href="+code=leftplatform_devi hf">pa*info./a>, constode=indevi href="+code=leftode=indevi h="sr./a>->.a href="+code=lock" clas6"+code=pa6" class="sref">par./a>-&6t;.a 61a>        .a href="+code=sys_copyarea"6"1id>
L406="+code=EINVAL" class="s6ef">E61e_horiz./a>(s="sref">arg./a>) <__ininfo./a> *.a href__ininode=p/a>(.a href="+c>par./ininfo./a> *.a href>par./ininage./voidrtic void .a href="+code=arcfb_ima6 id>
L4136 class="line" namn>
L4136>6413612q wi                      .a href="+co6 3id>
L406* wait until the Arc has6gener61ed a> interrur="sref">arg./a>) <.c#a> *.a href="+c.c#="sr./a>->.a href="+code=lock" clas6"4id>
L406* which will wake us up 6/./sp61a>        switch (.a href="+code=cmd" 6e=spin_lo6k_irqsave" class="sref">6pin_l61k_irqsave./a>rq./a>) pr6pare_61_wait./a>(&.a hre.c#L412" id>
L412" classNXIOvers/video/arcfsNXIO="sr./a>->.a href="+code=lock" clas6"7id>
L406="+code=TASK_INTERRUPTIB6E" cl61e_ver/a>->.a href="+code=lock" clas6"8o/arcfb6ock_irqrestore" class="s6ef">s61s="sref">min./a>(.a href="+c.c#a> *.a href="+c.c#="sra/a>); wait./a>, 3./a>(+code=indf="+cref="+code=leftode=indf="+ce=imr./a>->.a href="+code=lock" clas6e=schedul6" class="sref">schedule.6a>();6 *.a href="+c.c#="srr>                      .a href="+co6e=finishf6nishfinishfinishfiine" n6mn>
L618">64180"a>     +codeinfo./a>, constode=indevi href="+code=leftode=indevi h="sra/a>); 
L412"> latform_ evi h_allocage./a will./spa>
ss=ing">"ock" "./a>   ">0 ./a>->.a href="+code=lock" clas6="sref">l6ck./a>, ss="sref">spin_u6lock_62="+code=lower" class=eo/arcfb.c#L283" idode=indevi href="+code=leftode=indevi h="srr>                      .a href="+co6eid>
L4136code=right" class="sref"6right62vers/video/arrrrrrrrrrrrrrrrr/a>(.a href="+c.c#a> *.a href="+c.c#="sra/a>); 
L406" class="line" namn>
L326">63262class="sref">lass="sr} else>                      .a href="+co6e4id>
L406lass="sref">distance./a>6 .a h6ef="+code=uppeeeeeeeeerrrrrrrr/a>(.a href="+c.c#a> *.a href="+c.c#="sra/a" id>
L412" classNOMEMe" namn>
L412">6NOMEMe=im./a>->.a href="+code=lock" clas6 id>
L3266 class="line" namn>
L3266>632662k_irqsave./a>(&.a6istance./a> = .a href="+6ode=h62_wait./a>(&.a hreeo/arcfb.c#L283" id.c#a> *.a href="+c.c#="srr>                      .a href="+co6e7id>
L406r./a> = .a href="+code=f6oor8"62s="sref">TASK_INTERRUPTIBLE./=arcfb_waitq" c latform_ evi h_puf="+code=image"  latform_ evi h_pufage./a>->.a href=ode=indevi href="+code=leftode=indevi h="srr./a>->.a href="+code=lock" clas6=8o/arcfb6r./a> = .a href="+code=m6n" cl62pdate_horiz./a>(.a hrPTIBLE./=arcfb_waitq" c latform_ f="+c_un.cgisterref="+code=leftplatform_df="+c_un.cgisterage./">wait./a>, 3./a>(+code=indf="+cref="+code=leftode=indf="+ce=imr./a>->.a href="+code=lock" clas6 =schedul6 class="line" namn>
L3306>633162="+code=right" classadistance./a> > 6) { <63de=info" clasl6"sref">distance./a> -= (6.a hr63de=info" clas.c#L412ref">arg./a>) <.c#a> *.a href="+c.c#="sr./a>->.a href="+code=lock" clas6lcd_updat6_vert" class="sref">arcf6_lcd_63a>   /a>->.a href="+code=lock" clas6 class="s6ef">upper./a> = .a href=6+code63ed a>lower./a> = .a href=6+code63a>        switch (.a href="+code=cmd" 6b.c#L336"6id>
L336" class="line" n6mn>
L63ct6.a href="voidsref">arg./a>) <__exinfo./a> *.a href__exind a>s/./a>, 3./a>(+code=inexinfo./a> *.a hrefode=inexinage./voidrtic void .a href="+code=arcfb_ima6" id>
L336" class="line" namn>
L336">63363./a>:                      .a href="+co6   .a hre6 class="line" namn>
L3386>633863lass="sref">floor8./a>(.a hr latform_ evi h_un.cgisterref="+code=leftplatform_devi h_un.cgisterage./a>->.a href=ode=indevi href="+code=leftode=indevi h="srr./a>->.a href="+code=lock" clas6ef="drive6s/video/arcfb.c#L339" id6
L33963s="sref">min./a>(.a href="+c latform_ f="+c_un.cgisterref="+code=leftplatform_df="+c_un.cgisterage./">wait./a>, 3./a>(+code=indf="+cref="+code=leftode=indf="+ce=imr./a>->.a href="+code=lock" clas6 =schedul6ess of splitting out the6fb up63, unsl6x8 pages../spa>
 , 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=nume=ilne" namn>
L419">nume=ilnL419">width./a>,  *.a href="+culongL419">0 ./a>->.a href="+code=lock" clas6ref="driv6rs/video/arcfb.c#L343" i6>
L3464vers/ef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=nume=ilne" namn>
L419">nume=ilnL419">w will./spa>
ss=ing">"Num horiz wilels, eg: 2a/a128 bit wode"./a>   r./a>->.a href="+code=lock" clas6rclass="s6ass="sref">arcfb_lcd_upd6te./a64classt./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=numerowne" namn>
L419">numerownL419">width./a>,  *.a href="+culongL419">0 ./a>->.a href="+code=lock" clas6r4id>
L406code=dy" class="sref">dy6/a>, 64ref="ef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=numerowne" namn>
L419">numerownL419">w will./spa>
ss=ing">"Num ef=t wilels, eg: 1a/a64 bit high"./a>   r./a>->.a href="+code=lock" clas6r.c#L336"6" class="line" namn>
L346">63464s="srt./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=nosplashrs/video/arcfb.n"splasha>  ">width./a>, 0 ./a>->.a href="+code=lock" clas6r id>
L336="sref">left./a>, .a hre6="+co64">fb_ef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=nosplashrs/video/arcfb.n"splasha>  ">w will./spa>
ss=ing">"Disablh doing e" n2plashn20reen"./a>   r./a>->.a href="+code=lock" clas6r  .a hre6 class="line" namn>
L3486>634864s="srt./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=>par./enablhref="+code=leftode=inenablhL419">width./a>, 0 ./a>->.a href="+code=lock" clas6rf="drive6est first */./spa>
 
L412">MODU41_PARM_DESCage./a>->.a href=>par./enablhref="+code=leftode=inenablhL419">w will./spa>
ss=ing">"Enablh ideounicrefon woth" claboard"./a>   r./a>->.a href="+code=lock" clas6r=schedul6.a href="+code=floor8" c6ass="64a hret./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=dio_addef="+code=__userdio_added a>">width./a>,  *.a href="+culongL419">0 ./a>->.a href="+code=lock" clas6">h./a> +6 .a href="+code=dy" clas6="sre65ht" cef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=dio_addef="+code=__userdio_added a>">w will./spa>
ss=ing">"IO addeid>r8" cdatf, eg: 0x480"./a>   r./a>->.a href="+code=lock" clas6"own to 66.a href="+code=iceil8" c6ass="65de=int./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=bio_addef="+code=__usercio_added a>">width./a>,  *.a href="+culongL419">0 ./a>->.a href="+code=lock" clas6"ef="driv6 class="line" namn>
L3536>635365vers/ef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=bio_addef="+code=__usercio_added a>">w will./spa>
ss=ing">"IO addeid>r8" ccontrol, eg: 0x400"./a>   r./a>->.a href="+code=lock" clas6"class="s6istance./a> = .a href="+6ode=w65classt./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=b2io_addef="+code=__userc2io_added a>">width./a>,  *.a href="+culongL419">0 ./a>->.a href="+code=lock" clas6"4id>
L406/a> = .a href="+code=dx"6class65ref="ef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=b2io_addef="+code=__userc2io_added a>">w will./spa>
ss=ing">"IO addeid>r8" csecondaryccontrol, eg: 0x408"./a>   r./a>->.a href="+code=lock" clas6".c#L336"6t./a> = .a href="+code=m6n" cl65s="srt./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=2plashva/a> *.a href="+c2plashva/d a>">width./a>,  *.a href="+culongL419">0 ./a>->.a href="+code=lock" clas6" id>
L336 class="line" namn>
L3576>635765">fb_ef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=2plashva/a> *.a href="+c2plashva/d a>">w will./spa>
ss=ing">"Splashnpattern: 0xFF is black,t x0  is green"./a>   r./a>->.a href="+code=lock" clas6e" class=6sref">distance./a> > 6) { <65s="srt./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=tuholsfi/video/arcfb.tuholsd a>">width./a>,  *.a href="+culongL419">0 ./a>->.a href="+code=lock" clas6"f="drive6_horiz" class="sref">arc6b_lcd65s="sref="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=tuholsfi/video/arcfb.tuholsd a>">w will./spa>
ss=ing">"Tim9541 hols between("srobing datf541  claboard"./a>   r./a>->.a href="+code=lock" clas6r=schedul6"sref">distance./a> -= (6.a hr65a hret./a>, 3./a>(+cmodulef">iamfo./a> *.a hrefmodulef">iamage./a>->.a href=e" namn>
L411">6411./a>  efwidth./a>, 0 ./a>->.a href="+code=lock" clas6class="sr6f">left./a> = .a href="+6ode=r66ht" cef="drivers/vidMODU41_PARM_DESCe" namn>
L412">MODU41_PARM_DESCage./a>->.a href=e" namn>
L411">6411./a>  efw will./spa>
ss=ing">"IRQ18" clas" claboard"./a>   r./a>->.a href="+code=lock" clas6 class="s6ef">right./a> = .a href=6+code66a>        .spa> class="comment">/* upd6b.c#L363"6id>
L363" class="line" n6mn>
L66vers/ef="drivers/vidmodulefininfo./a> *.a hrefmodulefininage./a>->.a href=>par./ininfo./a> *.a href>par./ininage.r./a>->.a href="+code=lock" clas6 class="s6" class="line" namn>
L366">63666classt./a>, 3./a>(+cmodulefexinfo./a> *.a hrefmodulefexinage./a>->.a href=>par./exinfo./a> *.a hrefode=inexinage.r./a>->.a href="+code=lock" clas6 4id>
L406 class="line" namn>
L3656>636566a>        switch (.a href="+code=cmd" 6rect" cla6s="sref">arcfb_fillrect.6a>(st66s="srt./a>, 3./a>(+cMODU41_DESCRIPTIONvers/video/arcfMODU41_DESCRIPTIONage./a will./spa>
ss=ing">"fbdev h (.a 18" c clamonochrom95LCDaboard"./a>   r./a>->.a href="+code=lock" clas6  id>
L336="+code=fb_fillrect" cla6s="sr66">fb_ef="drivers/vidMODU41_AUTHORvers/video/arcfMODU41_AUTHORage./a will./spa>
ss=ing">"Jaya Kumar"./a>   r./a>->.a href="+code=lock" clas6 " class=6" class="line" namn>
L366">63666s="srt./a>, 3./a>(+cMODU41_LICENSEvers/video/arcfMODU41_LICENSEage./a will./spa>
ss=ing">"GPL"./a>   r./a>->.a href="+code=lock" clas6 f="drive6"sref">arcfb_par./a> *.a6href=66code= href="drivers/video/arcfb.c#L4136r=schedul6 class="line" namn>
L3706>637166="+co


Tas"original LXR software byclas"href="drihttp://source8" ge.net/projects/lxrr>LXR ideounitelassL#this"experio/aral s/vifon bychref="drimailto:lxr@e" ux.no">lxr@e" ux.nolass. lxr.e" ux.no kindly hosted bychref="drihttp://www.redpill-e" pro.no">Redpill L" pro ASlassL#proeo/ar of L" uxcconsulting and operrefonscservi hscsince 1995.