The Pedigree Project  0.1
AtaController.cc
1 /*
2  * Copyright (c) 2008-2014, Pedigree Developers
3  *
4  * Please see the CONTRIB file in the root of the source tree for a full
5  * list of contributors.
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #include "AtaController.h"
21 #include "AtaDisk.h"
22 
25 {
26  // Request type, ATA disk, and request location match.
27  if (a.p2 != b.p2)
28  {
29  return false;
30  }
31  else if (a.p1 != b.p1)
32  {
33  return false;
34  }
35 
36  AtaDisk *pDisk = reinterpret_cast<AtaDisk *>(a.p2);
37 
38  // Align location to block size before comparing, as the disks only do
39  // operations on aligned locations (and so we should compare the same
40  // here to reduce duplication).
41  uint64_t a_aligned_location = a.p3 & ~(pDisk->getBlockSize() - 1);
42  uint64_t b_aligned_location = b.p3 & ~(pDisk->getBlockSize() - 1);
43 
44  return a_aligned_location == b_aligned_location;
45 }
virtual size_t getBlockSize() const
Gets the block size of the disk.
Definition: AtaDisk.cc:1261
virtual bool compareRequests(const RequestQueue::Request &a, const RequestQueue::Request &b)